2016-12-29 65 views
7

Bu soruyu sorduğum için muhtemelen utanacağım bile, yine de devam edip, tam anlamıyla beni deli ediyor diye soruyorum. Umarım içlerinden birinin senin hakkında bir fikri vardır.WINAPI C/C++ -> ikili boyut neden önemli ölçüde arttı? (VS2013'den VS 2015'e geçin)

MS 2013'te MS'nin WIN32 varsayılan ('boş' ayarı ') projesinin derlenmesi, ~ 16kb'lık bir ikili boyut sağlar. Aynı projenin VS2015 Update3 ile derlenmesi, ~ 105kb (6x'den daha büyük!) Bir ikili boyut verir.

Cl.exe ve link.exe'ye iletilen son komut satırı parametrelerini iki kez ve üç kez işaretledim ve aynı görünüyorlar (proje ayarları). Proje ayarlarında bile değişiklikler - hıza göre büyüklükte avantaj - yardımcı olmayın (binary hala 105kb). Buraya nasıl gidiyor? Hatta 'hatalı' kurulum - aynı sonuçları (105kb) devre dışı bırakmak için VS2015 ikinci bir bilgisayara yükledim. Bu noktada bitirdiğim için yardım için uzanıyor.

+0

VS2015'te derlenmiş bir ikilide "DUMPBIN/HEADERS" çalıştırırken, ".gfids" adlı VS2013'de veya önceki sürümlerinde olmayan yeni bir PE bölümü olduğunu fark ettim. Bu olabilir mi? –

+0

@WeatherVane: Durum böyle olsaydı bile, OP aynı derleyiciyi ve bağlayıcı anahtarlarını kullandığı için her iki ikilide de olurdu. Varsayılan olarak, hata ayıklama bilgisi hiçbir zaman çalıştırılabilir görüntülerde derlenmez. – IInspectable

+0

Sadece "Merhaba Dünya!" Derledim Her ikisi de Win 7'de hem benzer MAKEFILE ile hem de MSVC 2009 (48k) ve MSVC 2015 (98k) ile program, her ikisi de 32-bit yürütülebilir. Hmmm. –

cevap

8

Şu anda VS 2013 yüklü değil, ancak VS 2010 ve VS 2015'i karşılaştıran hızlı bir test yaptım. Her sürümde bir "Win32 Project" (Windows Uygulaması, Boş Olmayan, Hayır) oluşturdum ATL, MFC yok). Her iki yürütülebilir üzerinde dumpbin /headers Running

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

kod boyutu küçük farkları gösterir, ancak ana farkları kaynakları gibi görünüyor: 32 bit sürüm oluşturma için ortaya çıkan dosya boyutları vardır

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

Daha yakından incelendiğinde, VS2015 versiyonundaki ikon kaynakları daha farklı alternatiflere (farklı boyutlar, farklı bit derinlikleri) sahiptir. Yani bu benim test durumumdaki büyüklük farkının büyüklüğü gibi görünüyor.

DÜZENLEME: PE bölümünde göre ayrılmış yürütülebilir boyutta Karşılaştırma:

 
+---------+-----------------+-----------------+-------+ 
| 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 | 

Yani, .rsrc hariç tuttuğunuzda, toplam fark 2K olduğunu.

+0

Rakamlarınız, VS 2010 kaynaklarının VS 2015 kaynaklarının neredeyse iki katı büyüklüğünde olduğunu gösteriyor. Bu bir yazım hatası mı? – IInspectable

+0

Bu, soru altında yorumda bahsedilen test sonuçlarını açıklıyor. –

+0

@IInspectable: Evet, yazım hatası - Geri aldım. Sabit. – cbranch

İlgili konular