2016-12-29 2 views
7

Несмотря на то, что я знаю, что, вероятно, мне захочется задать этот вопрос, я все равно продолжу и спрошу его, так как это буквально заводит меня в орехи. Я надеюсь, что, возможно, у вас есть кое-какие соображения по этому вопросу.WINAPI C/C++ -> почему бинарный размер резко увеличился? (Переключение с VS2013 на VS 2015)

Компиляция проекта MS по умолчанию WIN32 по умолчанию («не пустой») на VS2013 дает двоичный размер ~ 16kb. Компиляция того же проекта на VS2015 Update3 дает двоичный размер ~ 105kb (более 6x!).

Я дважды и тройной проверил параметры последней командной строки, переданные в cl.exe и link.exe, и они выглядят идентичными (параметры проекта). Даже изменения в настройках проекта - предпочитают размер по скорости - не помогают (двоичные все еще 105kb). Какого черта здесь? Я даже установил VS2015 на второй компьютер, чтобы исключить «дефектную» установку - те же результаты (105kb). Обращаясь за помощью, так как я закончил в этот момент.

+0

Я заметил, что при запуске 'DUMPBIN/HEADERS' на двоичном файле, составленном в VS2015, появился новый раздел PE, называемый' .gfids', который не был в VS2013 или предыдущих версиях. Может ли это так? –

+0

@WeatherVane: Даже если бы это было так, это было бы в обоих двоичных файлах, поскольку OP использовал идентичные компиляторы и компоновщики. Тем не менее, по умолчанию отладочная информация никогда не компилируется в исполняемые изображения. – IInspectable

+0

Я только что собрал «Hello World!» программа с MSVC 2009 (48k) и MSVC 2015 (98k), как из командной строки, так и с аналогичным MAKEFILE, как на Win 7, так и 32-разрядные исполняемые файлы. Хммм. –

ответ

8

У меня нет VS 2013, установленной на данный момент, но я просто сделал быстрый тест, сравнивающий VS 2010 и VS 2015. В каждой версии я создал «проект Win32» (приложение Windows, без пустого, нет ATL, No MFC). Получаемые размеры файла для сборки выпуска в 32-битном являются:

VS 2010: 57,344 
VS 2015: 104,448 

Запуск dumpbin /headers на обоих исполняемыми показывает небольшие различия в размере кода, но главное отличие, кажется, ресурсы:

VS 2010 .rsrc size: 0xC200 (about 49K) 
VS 2015 .rsrc size: 0x17200 (about 92K) 

При ближайшем рассмотрении ресурсы значков в версии VS2015 имеют больше альтернатив (разные размеры, разные битовые глубины). Так что это большая часть разницы в размерах в моем тестовом случае.

EDIT: Сравнение размер исполняемого файла с разбивкой по разделам PE:

 
+---------+-----------------+-----------------+-------+ 
| Section |  VS 2010  |  VS 2015  | Change| 
|   | (hex) | (dec) | (hex) | (dec) | (dec) | 
+---------+--------+--------+--------+--------+-------+ 
| .text | 0xC00 | 3072 | 0x1000 | 4096 | 1024 | 
| .rdata | 0x800 | 2048 | 0xC00 | 3072 | 1024 | 
| .data | 0x200 | 512 | 0x200 | 512 |  0 | 
| .rsrc | 0xC200 | 49664 | 0x17200| 94720 | 45056 | 
| .reloc | 0x400 | 1024 | 0x200 | 512 | -512 | 
| .gfids | n/a | n/a | 0x200 | 512 | 512 | 
+---------+--------+--------+--------+--------+-------+ 
             Total | 47104 | 

Таким образом, когда вы исключаете .rsrc, общая разница составляет 2К.

+0

Ваши номера показывают, что ресурсы VS 2010 почти вдвое превышают ресурсы VS 2015. Это опечатка? – IInspectable

+0

Это подтверждает мои результаты испытаний, упомянутые в комментарии по этому вопросу. –

+0

@Инспективный: Да, опечатка - у меня было это в обратном направлении. Исправлена. – cbranch

 Смежные вопросы

  • Нет связанных вопросов^_^