Visual C++ express 2008: почему он помещает мегабайты нулевых байтов в конец исполняемого файла релиза?
Недавно я обнаружил, что мой исполняемый файл релиза (созданный с помощью msvC++ express 2008) становится очень большим. Когда я проверял исполняемый файл с помощью шестнадцатеричной программы просмотра, я увидел, что только первые 300 Кбайт содержат полезные данные, остальные байты - это только нули - 6 мегабайт нулевых байтов.
Файл с отладочной версией имеет размер 1 МБ, но выпуск составляет 6,5 МБ.
Почему MSVC++ express делает эту бесполезную вещь? Как я могу это исправить?
3 ответа
Вы определили большие массивы в области видимости файла в вашей программе? Это может быть одной из причин. Вы можете использовать программу dumpbin, чтобы увидеть, сколько места занимает каждый раздел в exe-файле, что должно дать вам подсказку "почему".
Возможно, вы статически связываете свой.exe в выпуске, но динамически связываете в отладке? Проверьте это диалоговое окно Project Properties.
Другая возможность заключается в том, что в режиме выпуска много встроенных функций или вы используете много шаблонов.
Вы можете указать компилятору оптимизировать размер в диалоговом окне "Свойства проекта".
Выпуск в 6 раз больше, чем Debug - возможно, что-то не так. Попробуйте создать свежий проект и просто скопируйте ваш исходный код. Скомпилируйте его и посмотрите, что вы получите за исполняемые файлы Debug и Release.