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

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

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

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

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

Edit:

Программа и все связанные библиотеки создаются с использованием одного и того же файла 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% больше: - (

Ответы [ 2 ]

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

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

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

0 голосов
/ 03 декабря 2008

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

...