什么是LLVM Comdat?
LLVM中的comdat代表什么?您可以在此处找到来源: 源代码级程序表示(c++)的示例将非常有用 如果您需要更多信息,请随时询问。我在llvm代码库中的许多地方都能找到它,但我无法确定它到底是什么,以及它的用途什么是LLVM Comdat?,llvm,llvm-clang,llvm-ir,llvm-c++-api,Llvm,Llvm Clang,Llvm Ir,Llvm C++ Api,LLVM中的comdat代表什么?您可以在此处找到来源: 源代码级程序表示(c++)的示例将非常有用 如果您需要更多信息,请随时询问。我在llvm代码库中的许多地方都能找到它,但我无法确定它到底是什么,以及它的用途 谢谢你的帮助 我还学习了Comdat,并从中看到以下解释 Comdat节是对象文件中放置对象的节,可以在其他对象文件中复制。每个对象都有链接器的信息,指示在检测到重复项时必须执行的操作。选项可以是:任意 — 做任何事,对吗 — 重复项必须完全匹配,否则会发生错误,最大 — 取值最大的
谢谢你的帮助 我还学习了
Comdat
,并从中看到以下解释
Comdat节是对象文件中放置对象的节,可以在其他对象文件中复制。每个对象都有链接器的信息,指示在检测到重复项时必须执行的操作。选项可以是:任意 — 做任何事,对吗 — 重复项必须完全匹配,否则会发生错误,最大 — 取值最大的对象nopublicates — 不应该有重复的,SameSize — 重复项的大小必须相同,否则会发生错误
在LLVM中,Comdat数据由枚举表示:
enum SelectionKind {
Any, ///< The linker may choose any COMDAT.
ExactMatch, ///< The data referenced by the COMDAT must be the same.
Largest, ///< The linker will choose the largest COMDAT.
NoDuplicates, ///< No other Module may specify this COMDAT.
SameSize, ///< The data referenced by the COMDAT must be the same size.
};
enum SelectionKind{
Any,//<链接器可以选择任何COMDAT。
ExactMatch,//
类Comdat实际上代表一对(名称,SelectionKind)。(事实上,一切都更复杂。)所有因某种原因无法删除的变量都放在一组NotDiscardableComdat中。对于函数和全局别名,我们也这样做 — 无法删除的内容被放置在NotDiscardableComdats中。然后,分别调用全局构造函数、全局函数、全局变量、全局别名和全局析构函数的优化函数。在循环中继续优化,直到没有执行优化为止。在循环的每次迭代中,NotDiscardableComdats的集合被设置为零。可能的重复项