На самом деле, если ваш код ничего не делает, разве справедливо, что компилятор все еще создает исполняемый файл? ; -)
Что ж, в Windows любой исполняемый файл по-прежнему будет иметь размер, хотя он может быть достаточно маленьким. При использовании старой системы MS-DOS полное приложение, которое ничего не делает, будет занимать пару байтов. (Я думаю, четыре байта, чтобы использовать 21-часовое прерывание, чтобы закрыть программу.) С другой стороны, эти приложения были загружены прямо в память.
Когда формат EXE стал более популярным, все немного изменилось. Теперь исполняемые файлы имели дополнительную информацию о самом процессе, например, перемещение кода и сегментов данных, а также некоторые контрольные суммы и информацию о версии.
Внедрение Windows добавило еще один заголовок к формату, чтобы сообщить MS-DOS, что он не может выполнить исполняемый файл, так как он должен был работать под Windows. И Windows узнает это без проблем.
Конечно, формат исполняемого файла также был расширен за счет информации о ресурсах, таких как растровые изображения, значки, диалоговые формы и многое, многое другое.
В настоящее время исполняемый файл без действия будет иметь размер от 4 до 8 килобайт, в зависимости от вашего компилятора и каждого метода, который вы использовали для уменьшения его размера. Это было бы в размере, где UPX фактически привел бы к большим исполняемым файлам! Дополнительные байты в вашем исполняемом файле могут быть добавлены, потому что вы добавили определенные библиотеки в свой код. Особенно библиотеки с инициализированными данными или ресурсами будут добавлять значительное количество байтов. Добавление отладочной информации также увеличивает размер исполняемого файла.
Но хотя все это является хорошим упражнением по уменьшению размера, вы можете задаться вопросом, целесообразно ли просто продолжать беспокоиться о раздутости приложений. Современные жесткие диски делят файлы на сегменты, а для действительно больших дисков разница будет очень мала. Тем не менее, количество проблем, которые потребуются для поддержания как можно меньшего размера, замедлит скорость разработки, если вы не являетесь опытным разработчиком, который привык к такой оптимизации. Подобные оптимизации не имеют тенденцию повышать производительность, и, учитывая среднее дисковое пространство большинства систем, я не понимаю, почему это было бы целесообразно. (Тем не менее, я оптимизирую свой собственный код подобными способами, но с другой стороны, у меня есть опыт этой оптимизации.)
Интересует заголовок
EXE ? Это начинается с буквы MZ, для "Марк Zbikowski". Первая часть - это заголовок MS-DOS старого стиля для исполняемых файлов, который используется в качестве заглушки для MS-DOS, говоря, что программа
, а не исполняемый файл MS-DOS. (В двоичном файле вы можете найти текст «Эта программа не может быть запущена в режиме DOS». Это в основном все, что он делает: отображение этого сообщения. Далее идет заголовок PE, который Windows распознает и использует вместо MS-DOS. заголовок. Он начинается с букв
PE для Portable Executable . После этого второго заголовка будет сам исполняемый файл, разделенный на несколько блоков кода и данных. Заголовок содержит специальные таблицы перераспределения, которые сообщают ОС, куда загрузить определенный блок. И если вы можете ограничить его, конечный исполняемый файл может быть меньше 4 КБ, но тогда 90% будет информацией заголовка и не будет функционировать.