我看到/ Gy選項,並想知道爲什麼我會使用它? http://msdn.microsoft.com/en-us/library/xsa71f43.aspx什麼是COMDAT部分用於?
回答
currently accepted answer有些不完整。
COMDAT部分的目的是允許在多個對象文件中定義「重複」部分。通常,如果在多個目標文件中定義了相同的符號,鏈接器將報告錯誤。這可能會導致某些C++語言功能(如模板)出現問題,可能會在不同的cpp文件中實例化相同的符號。
COMDAT部分用於解決此問題。當某個節在對象文件中被標記爲COMDAT時,它還指定一個標誌來指示應如何解決衝突。有很多選擇,包括「只挑選你喜歡的任何人」,「確保所有的仲裁人都是相同的大小」,「確保所有的仲裁者,擁有相同的內容」,「挑選最大的人」等。 COFF規範的完整列表。
在任何情況下,與currently accepted answer表示的不同,對於COMDAT部分的內容必須是什麼樣的方式,沒有任何要求。它們可以包含一個程序,許多程序,數據或代碼和數據的任意組合。
/Gy選項很適合在發佈版本中使用。 '因爲每個函數都有它自己的部分,鏈接器可以刪除每一個未使用的代碼。 如果你沒有指定/ Gy選項,你會得到如下結果: 「a.cpp」定義了3個函數,編譯時編譯器將它們放在一個代碼段中。 「main.cpp」只使用「a.cpp」中的一個函數,但鏈接「a.cpp」中的所有函數時將會鏈接(其中兩個作爲負擔)。如果每個函數都有它自己的部分,鏈接器只能選取一個包含「main.cpp」所需功能的函數。 編譯不帶/ Gy選項對調試版本非常有用。 編譯類時,默認情況下,它的所有方法都會自行獲取單獨的部分。
這是舊的,但對於任何人的信息:這不是連接器的工作原理。有一個完全不同的開關來控制未引用的功能:/ OPT:REF(Optimization-> References:Yes)。它下面還有一個合併相同功能/ OPT:ICF的權利。 ICF僅適用於/ Gy,但REF可以使用或不使用它。 – SilverbackNet 2015-05-04 21:37:10
- 1. COMDAT部分名稱
- 2. 芹菜部分是什麼?
- 3. 這是什麼部分
- 4. 部分視圖是什麼?
- 5. 什麼是'linkonce'部分
- 6. 什麼是關鍵部分?
- 7. 部分課程是什麼?
- 8. 什麼是「接受」部分?
- 9. ExcelDataReader - 什麼是數據讀取器方法部分用於?
- 10. COMDAT部分放置在可執行文件中
- 11. 什麼是git分支用於?
- 12. 什麼是用於分配在DLL
- 13. 什麼是用於分選方法
- 14. 什麼是用於
- 15. 什麼是+ =用於?
- 16. 什麼是用於
- 17. 什麼是(;;)用於?
- 18. 什麼是用於
- 19. 什麼是用於
- 20. JOIN部分的名稱是什麼
- 21. 什麼部分是參數化類型?
- 22. 什麼是圖像的bss部分?
- 23. Javascript的部分是什麼? - wwOpenInstalled
- 24. 這是什麼!一部分!function(){...}();意思?
- 25. 什麼是206部分內容
- 26. Hangman是什麼部分重複的信
- 27. [NSFetchedResultsController部分]究竟是什麼?
- 28. 什麼是HTML5的一部分?
- 29. 爲什麼Actor.receive是部分函數?
- 30. 什麼是內核部分不匹配?
[Function-LeveL Linking(VC++中的/ Gy開關)可能的重複 - 有什麼好處?](http://stackoverflow.com/questions/629894/function-level-linking-gy-switch-in -vc-what-it-it-good-for) – 2012-08-09 15:30:52