我使用MSVC++和Visual Studio 2012,建立基本的非託管C++在x86/x64 Windows和控制檯子系統的方案。 (異常處理關閉)在什麼條件下必須CPP代碼編譯和鏈接到該exe
我有一個相當大的項目,當對最終的EXE大小好奇時,我決定看看如果我將main()函數改爲什麼也不做(因此不會調用或我注意到exe文件的大小仍然比我去的時候大得多,並且從項目中刪除了所有cpp文件。
所以我想知道什麼類型的C++代碼會導致代碼是即使main函數沒有任何作用,也可以鏈接在一起。一個例子是在你的一個類型爲A的cpp文件中有一個全局變量,其中A是一個類/結構體,在這種情況下,我假定A的構造函數和析構函數必須被包括在內,以及A的所有成員類型的構造函數和析構函數秒。
在Visual Studio中我有所有優化接通包括所述接頭的人,以消除功能/數據不會被引用,並COMDAT摺疊。和cpp代碼生成以啓用comdats /功能級別鏈接。
更新: 我沒有使用任何C++ 11或更高版本的功能。雖然我不確定我的構建環境是否爲C++ 11或更高版本構建,或者這會產生什麼影響。
有多大,你的情況大嗎? – prabindh
〜100k vs〜50k當所有cpp被刪除時。我使用靜態鏈接的vcpp庫而不是dll。當它正在建設和使用大多數功能和類時,exe也是約150k。 (而不是導致大約100k的空主功能) – matt