0

带有 /Gy 选项的 Microsoft C++ 会将每个函数放在不同的部分中,以便链接器可以省略未使用的函数,这可能会减小可执行文件的大小。

除了将每个函数放在不同的部分之外,它还使用选择 IMAGE_COMDAT_SELECT_NODUPLICATES 标记每个部分 COMDAT。COMDAT 的目的是允许在多个位置定义某些内容(链接器选择一个定义并丢弃其他定义),但该选择值不允许多个定义,这似乎只是取消了效果。

IMAGE_COMDAT_SELECT_NODUPLICATES 的目的到底是什么?或者为什么带有 /Gy 的 Microsoft C++ 将代码段标记为 COMDAT?

4

0 回答 0