Исполняемые файлы обычно содержат сегмент кода и хотя бы один сегмент данных. Я думаю, что каждый из них имеет стандартный минимальный размер, который может быть 8K. И неиспользуемое пространство заполнено нулями. Также обратите внимание, что EXE-файл, написанный на языке более высокого уровня (чем ассемблер), содержит некоторые дополнительные вещи помимо прямого перевода вашего собственного кода и данных:
- код запуска и завершения (в C и его преемниках он обрабатывает входные аргументы, вызывает
main()
, а затем очищается после выхода из main()
)
- код и данные заглушки (например, исполняемые файлы Windows содержат небольшую заглушку для программы DOS, единственной целью которой является отображение сообщения «Эта программа не выполняется под DOS»).
Тем не менее, поскольку исполняемые файлы обычно должны что-то делать (т. Е. Их код и сегмент (ы) содержат полезные данные), а хранилище стоит дешево, по умолчанию никто не оптимизирует для вашего случая: -)
Однако я полагаю, что большинство компиляторов имеют параметры командной строки, с помощью которых вы можете принудительно оптимизировать их для пространства - вы можете проверить результаты с этим параметром.
Вот подробней о форматах файлов EXE .