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

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

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

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

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

Сообщение Romtek »

Умеет ли компилятор ...
  • отбрасывать неиспользуемый код (константы и т.д.)
Если да, то как?
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Это smartlink

ключи: -XX -CX

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

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

Хотя почему это не вделано в сам компилятор (при генерации кода),
а происходит только при сборке...
Аватара пользователя
Romtek
постоялец
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган
Контактная информация:

Сообщение Romtek »

Занимательно. Если не указывать ключ -Mdelphi, то лишняя информация не включается.
Пробовал на коде

Код: Выделить всё

const
  some: string = 'some string';
begin
end.

Так что получается, что Лазарусом информация таки включится, т.к. тот по-моему всегда использует ключ -Mdelphi.
Юра
постоялец
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Юра »

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

В FPC 2.1.1 сделан внутренний линкер для Windows платформ, котрый делает смартлинк быстро и всегда. Поэтому уже никаких ключиков указывать не надо для 2.1.1 если компилить под Windows.
Аватара пользователя
Romtek
постоялец
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган
Контактная информация:

Сообщение Romtek »

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

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

P.S. ветка 2.1.x меня на данный момент не интересует.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Можно рискнуть поиграться с {$J+}/{$J-}.
Возможно, что при включенном режиме "assignable typed consts" константа фактически превращается в переменную, которая требует очистки при завершении программы. Из-за этого и происходит включение в код.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

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


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

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


А вот это не понятно - лапа M$ или технические сложности ?
Аватара пользователя
Romtek
постоялец
Сообщения: 190
Зарегистрирован: 22.05.2005 12:29:35
Откуда: Рамат Ган
Контактная информация:

Сообщение Romtek »

То есть и с ключами и без размер ровно тот же ?
Да.
Варианты -XX -CX -Mdelphi и просто -Mdelphi генерируют тот же код
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

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


M$ ни при чем. Для (большинства) не-Windows платформ внешний линкер просто не нужен, т.к. ld из gnu binutils нормально делает свою работу. Однако порт этого ld для Win32 работает невообразимо медленно и жрет немеряно памяти, а порта для Win64 на момент создания внутреннего линкера вообще в природе не существовало.
Юра
постоялец
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Юра »

Почти правильно. Но на самом деле LD на всех платформах практически одинаков - работает медленно и жрет много памяти. Но на других платформах нет такого огромного юнита как Windows. Поэтому там линкуется быстрее только за счет этого...
Когда нибудь внутренний линкер будет и для elf бинарников.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Странно... Вроде бы модуль windows практически такой же по размеру, как например gtk2. И с libc наверняка сравним. Тем не менее, Лазарь под Linux линкуется едва ли не быстрее, чем под Windows со встроенным линкером.
Аватара пользователя
shade
энтузиаст
Сообщения: 879
Зарегистрирован: 21.02.2006 19:15:48
Откуда: http://shamangrad.net/
Контактная информация:

Сообщение shade »

По моим субъективным наблюдениям, *nix на порядок быстрее работает с файлами, особенно на родных ФС, поэтому и лдинкер соответственно работает быстрее...
Ответить