我看到了/ Gy选项,我想知道为什么要使用它?http://msdn.microsoft.com/en-us/library/xsa71f43.aspx
Sco*_*ski 83
在目前接受的答案是有些不完整.
COMDAT部分的目的是允许在多个目标文件中定义"重复"部分.通常,如果在多个目标文件中定义了相同的符号,则链接器将报告错误.这可能会导致某些C++语言功能(如模板)出现问题,这些功能可能会在不同的cpp文件中实例化相同的符号.
COMDAT部分用于解决这个问题.当某个部分在目标文件中标记为COMDAT时,它还会指定一个标志,指示应如何解决冲突.有很多选项,包括"只选择你喜欢的人","确保所有重复.大小相同","确保所有重复.具有相同的内容","选择最大的",等等. COFF规范的完整列表.
无论如何,与目前接受的答案所说的不同,COMDAT部分的内容必须是这样或那样的.它们可以包含一个过程,许多过程,数据或代码和数据的任意组合.
/ Gy选项很适合在发布版本中使用.因为每个函数都有它自己的部分,链接器可以删除每个未使用的代码段.如果你没有指定/ Gy选项,你会得到这样的结果:"a.cpp"定义了3个函数,编译器在编译时将它们放在一个代码段中."main.cpp"只使用"a.cpp"中的一个函数,但是当链接"a.cpp"中的所有函数时,它们将被链接(其中两个作为负担).如果每个函数都有自己的部分,链接器只能选择一个包含"main.cpp"所需函数的函数.不使用/ Gy选项进行编译对于调试版本是有用的.编译类时,默认情况下,它的所有方法都有自己独立的部分.
| 归档时间: |
|
| 查看次数: |
18733 次 |
| 最近记录: |