Умеет ли компилятор ...

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Умеет ли компилятор ...

Сообщение Romtek » 12.02.2007 16:14:09

Умеет ли компилятор ...
  • отбрасывать неиспользуемый код (константы и т.д.)
Если да, то как?
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение Alexander » 12.02.2007 23:41:08

Это smartlink

ключи: -XX -CX

или для юнитов внутри них (то же что и -CX):
{$SMARTLINK ON}

Используемые юниты должны быть скомпилированы с его поддержкой.
Которые скомпилированы без поддержки будут прилинкованы полностью.

Хотя почему это не вделано в сам компилятор (при генерации кода),
а происходит только при сборке...
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Romtek » 13.02.2007 12:19:16

Занимательно. Если не указывать ключ -Mdelphi, то лишняя информация не включается.
Пробовал на коде
Код: Выделить всё
const
  some: string = 'some string';
begin
end.

Так что получается, что Лазарусом информация таки включится, т.к. тот по-моему всегда использует ключ -Mdelphi.
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение Юра » 13.02.2007 12:46:00

Ключ -Mdelphi тут не причем. Нужно все перекомпилировать с ключами -XX -CX.

В FPC 2.1.1 сделан внутренний линкер для Windows платформ, котрый делает смартлинк быстро и всегда. Поэтому уже никаких ключиков указывать не надо для 2.1.1 если компилить под Windows.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Romtek » 13.02.2007 14:12:11

Юра писал(а):Ключ -Mdelphi тут не причем. Нужно все перекомпилировать с ключами -XX -CX.

Когда компилирую с ключами -XX -CX -Mdelphi , таки лишняя информация подключается.

P.S. ветка 2.1.x меня на данный момент не интересует.
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение Sergei I. Gorelkin » 13.02.2007 15:28:30

Можно рискнуть поиграться с {$J+}/{$J-}.
Возможно, что при включенном режиме "assignable typed consts" константа фактически превращается в переменную, которая требует очистки при завершении программы. Из-за этого и происходит включение в код.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Alexander » 13.02.2007 18:39:59

Romtek писал(а):Когда компилирую с ключами -XX -CX -Mdelphi , таки лишняя информация подключается.


То есть и с ключами и без размер ровно тот же ? Уточнение: не только
свои юниты, но и вообще ВСЕ используемые юниты должны быть
(в идиале) скомпилированы с {$SMARTLINK ON}

Юра писал(а):В FPC 2.1.1 сделан внутренний линкер для Windows платформ,


А вот это не понятно - лапа M$ или технические сложности ?
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 821
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Romtek » 13.02.2007 19:33:30

То есть и с ключами и без размер ровно тот же ?
Да.
Варианты -XX -CX -Mdelphi и просто -Mdelphi генерируют тот же код
Аватара пользователя
Romtek
постоялец
 
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган

Сообщение Sergei I. Gorelkin » 13.02.2007 20:11:20

Alexander писал(а):А вот это не понятно - лапа M$ или технические сложности ?


M$ ни при чем. Для (большинства) не-Windows платформ внешний линкер просто не нужен, т.к. ld из gnu binutils нормально делает свою работу. Однако порт этого ld для Win32 работает невообразимо медленно и жрет немеряно памяти, а порта для Win64 на момент создания внутреннего линкера вообще в природе не существовало.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Юра » 13.02.2007 21:16:29

Почти правильно. Но на самом деле LD на всех платформах практически одинаков - работает медленно и жрет много памяти. Но на других платформах нет такого огромного юнита как Windows. Поэтому там линкуется быстрее только за счет этого...
Когда нибудь внутренний линкер будет и для elf бинарников.
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Sergei I. Gorelkin » 14.02.2007 01:09:43

Странно... Вроде бы модуль windows практически такой же по размеру, как например gtk2. И с libc наверняка сравним. Тем не менее, Лазарь под Linux линкуется едва ли не быстрее, чем под Windows со встроенным линкером.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение shade » 14.02.2007 09:52:35

По моим субъективным наблюдениям, *nix на порядок быстрее работает с файлами, особенно на родных ФС, поэтому и лдинкер соответственно работает быстрее...
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 1

Рейтинг@Mail.ru