Есть ли разница (повторная оптимизация) между компилятором MSVC ++ 2008 и PSDK?

Я только что установил Platform SDK для Windows Server 2008 и .NET 3.5 в свою новую систему и впервые попытался скомпилировать проект для WIN64. Версия Unicode Release этой программы, созданная для 32-разрядной версии (с использованием оптимизирующего компилятора из более недоступного Free Toolkit), занимает около 2,8 МБ. При использовании компилятора amd64 из последней версии PSDK программа имеет размер более 5 МБ.

Меня больше всего беспокоит размер программы, поэтому все построено с переключателем / O1. Я ожидал, что программа станет больше, когда будет построена для 64-битной версии, но не настолько. Размер больше соответствует сборке из экспресс-версии, где (некоторые) оптимизации недоступны.

Компилятор из PSDK и компилятор из MSVC 2008 Professional создают программы очень разных размеров? Оптимизирует ли компилятор в PSDK таким же образом или даже вообще?

Спасибо за понимание.

Изменить:

Программа и все связанные библиотеки построены с использованием одного и того же файла makefile.vc в командной строке, поэтому различия в настройках компиляции маловероятны. Я просто использовал другой командный файл для запуска оболочки с подходящей средой для 64-битной компиляции.

Вот размеры для приложения:

    VC++ Toolkit 2003   32 bit   cl.exe: 13.10.3052 for 80x86       2.916.352
    Platform SDK        32 bit   cl.exe: 15.00.30729.01 for 80x86   2.881.536
    Platform SDK        64 bit   cl.exe: 15.00.21022.08 for x64     5.138.432

Таким образом, 64-битная версия на 78% больше :-(


person mghie    schedule 03.12.2008    source источник
comment
Вы должны убедиться, что переменные среды не влияют на другие аспекты.   -  person leppie    schedule 03.12.2008
comment
Спасибо за подсказку, завтра посмотрю. Также будет использовать компилятор PSDK для 32-битной сборки, чтобы увидеть, какая разница в размере.   -  person mghie    schedule 03.12.2008
comment
Я не заметил различий в переменных окружения.   -  person mghie    schedule 04.12.2008


Ответы (2)


64-разрядный двоичный файл будет больше, чем 32-разрядный двоичный файл из-за различий в коде, статических данных и т. Д. Размер нашего проекта составляет 7,1 МБ (x86) против 10,7 МБ (x64), и это для значительной части код. Почти удвоение звучит чрезмерно, если у вас нет большого количества статических данных размером с указатель.

Убедитесь, что вы устанавливаете ссылку с / OPT: REF, чтобы отбросить все символы, на которые нет ссылок.

person Rob Walker    schedule 03.12.2008
comment
/ OPT: REF вообще не имеет никакого значения, это задокументировано как значение по умолчанию. Разница в размерах кажется очень большой ИМХО, но если у вас тоже есть увеличение примерно на 40%, думаю, я мало что могу с этим поделать. Тем не менее, меня все еще интересует конкретный ответ о различиях в компиляторах. - person mghie; 04.12.2008
comment
Я принимаю этот ответ, хотя в нем не говорится, производят ли компиляторы одинаковый результат. Похоже, никто никогда не компилировал свой код с обоими. Поскольку у меня нет версии Visual Studio Pro, она останется для меня загадкой ;-) - person mghie; 10.01.2009

Сильно сомневаюсь, что дело в оптимизаторе. Разница в размере программы, вероятно, связана с отладочной информацией и / или подключаемыми статическими библиотеками. Убедитесь, что вы не связываете какие-либо статические библиотеки, которые вам не нужны.

person Adam Rosenfield    schedule 03.12.2008