C++ Clang/LLVM中的代码模型指的是什么?

C++ Clang/LLVM中的代码模型指的是什么?,c++,clang,llvm,code-generation,C++,Clang,Llvm,Code Generation,我一直在浏览Clang/LLVM源代码,发现了的CodeModel属性 根据,有效值似乎是:“小”,“内核”,“中”和“大” 这个属性控制什么 如何为我的应用程序选择正确的值 代码模型是AMD64 ABI中的一个术语(有关更多信息,请参见中的3.5.1) 简言之,x64-64指令内的大多数偏移量是PC相关的,但指令内的立即数字段只有32位长。因此,如果数据距离代码“远”(相距超过32位),则不能使用指令中的立即数字段来有效地编码偏移量,并且应该显式地计算地址。代码模型对代码和数据的相对位置提供了

我一直在浏览Clang/LLVM源代码,发现了的
CodeModel
属性

根据,有效值似乎是:
“小”
“内核”
“中”
“大”

这个属性控制什么


如何为我的应用程序选择正确的值

代码模型是AMD64 ABI中的一个术语(有关更多信息,请参见中的3.5.1)

简言之,x64-64指令内的大多数偏移量是PC相关的,但指令内的立即数字段只有32位长。因此,如果数据距离代码“远”(相距超过32位),则不能使用指令中的立即数字段来有效地编码偏移量,并且应该显式地计算地址。代码模型对代码和数据的相对位置提供了各种限制

如果您是静态编译所有内容,那么“小”是安全的(默认)。如果您是JIT'ing,那么一切都是可能的,特别是如果启用了ASLR,并且您需要使用中/大型代码模型