Что может повлиять на размер исполняемого файла Delphi? - PullRequest
8 голосов
/ 11 ноября 2008

У меня та же версия delphi, bpls, компоненты, все. И все же на трех машинах получающиеся исполняемые файлы различаются по размеру. Что еще может повлиять на размер exe?

В моей машине я получаю этот размер (Vista 6.0.6001):

4.547.584 bytes

В машине моего коллеги он получает (XP 5.1.2600 SP3):

4.530.688 bytes

В третьем колледже он получает: (XP 5.1.2600 SP2)

4.527.104 bytes

Влияет ли версия ОС на размер скомпилированного exe?

Ответы [ 7 ]

10 голосов
/ 11 ноября 2008

Может показаться, что это различия в конфигурации, или, может быть, у вас установлены разные версии компонентов между тремя компьютерами. Я бы предложил создать пустую форму и попробовать ее на всех 3 после того, как вы убедитесь, что настройки сборки одинаковы. Если это то же самое, добавляйте сторонние компоненты, пока не найдете другой.

Кроме того, у вас может быть другая версия Delphi (основная или дополнительная / обновленная версия).

7 голосов
/ 11 ноября 2008

Различия почти наверняка связаны с различными настройками компилятора между машинами. Например, включение или отключение проверки диапазона немного изменит размер получаемого файла.

Одна из приятных вещей в более поздних версиях Delphi - это использование MSBuild, которое может легко гарантировать, что настройки для любой данной сборки одинаковы.

4 голосов
/ 10 июня 2009

Ммм ...

SizeOf (XPSP2.exe)

Вывод:

Чем позже версия Windows, тем больше «заполнителей» вставляется случайным образом для повышения достоверности. Если он занимает больше места, он должен быть более мощным, и, вероятно, его кодировали лучшие инженеры мира! :-) (извините - я слишком долго работаю в Microsoft!)

3 голосов
/ 11 ноября 2008

В Delphi / BCB на размер могут влиять несколько факторов:

Ваша конфигурация сборки : Режим выпуска не связывает в разделе отладки с EXE (по умолчанию), поэтому он меньше. также вы можете получить поддержку от оптимизации кода.

Связывание с динамическим RTL : Если этот параметр включен, EXE-файл будет меньше, но вам потребуется наличие внешних библиотек.

Сборка с пакетами времени выполнения : если этот параметр включен, вы динамически ссылаетесь на используемые вами пакеты времени выполнения вместо того, чтобы связывать их непосредственно с вашим EXE-файлом. Это может привести к самым большим разницам в размерах.

Это и другие факторы, но перечисленные выше являются главными, с которыми я сталкиваюсь.

1 голос
/ 13 марта 2009

На самом деле, это проблема, которая существует уже довольно давно. См

Контроль качества CodeGear

Группы новостей Borland Delphi

Недавнее обсуждение этого вопроса на Delphi newsgroups (http view).

Это абсолютно не связано с различиями в установке компонентов или чем-то подобным; фактически последняя ссылка упоминает что-то, связанное с временными метками, которые вставляются в приложение при каждой компиляции / сборке. Кроме того, если вы выполняете сборку и включаете информацию о версии, а для номера сборки установлено значение автоинкремента, это также вызовет двоичные различия.

1 голос
/ 19 декабря 2008

IIRC, повторные компиляции после внесения незначительных изменений могут также привести к тому, что вокруг будет лежать грязь - я думаю, один из побочных эффектов умного компилятора:}

0 голосов
/ 13 марта 2009

На самом деле это гораздо интереснее, чем.

Даже повторное построение одного и того же приложения на одной и той же машине несколько раз подряд без внесения абсолютно никаких изменений в конфигурацию между компиляциями приводит к получению исполняемых файлов немного разных размеров. Я построил конкретный проект 10 раз и получил 10 (!) Разных исполняемых размеров - каждый раз разный размер!

Я заметил, что это явление встречается только в проектах достаточного размера / сложности.

Если вы сделаете это в относительно простом проекте, исполнимый файл будет того же размера, хотя все равно будут внутренние различия (если вы выполняете двоичное сравнение). У меня нет времени, чтобы исследовать это сейчас, но мне немного любопытно.

Обратите внимание, что простое выполнение компиляции, т. Е. Просто повторное связывание приложения, не меняет размер получающегося исполняемого файла, но меняет его содержимое (генерируемые двоичные файлы не идентичны).

...