作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在查看 Clang/LLVM 源代码,我发现了 CodeGenOptions
的 CodeModel
属性.
基于 this method ,有效值似乎是:"small"
、"kernel"
、"medium"
和 "large"
。
这个属性控制什么?
如何为我的应用程序选择正确的值?
最佳答案
代码模型是 AMD64 ABI 中的一个术语(有关更多信息,请参阅 https://www.intel.com/content/dam/develop/external/us/en/documents/mpx-linux64-abi.pdf 中的 3.5.1)。
简而言之 - x86-64 指令中的大部分偏移量都是 PC 相关的,但是指令中的立即字段只有 32 位长。因此,如果数据距离代码“很远”(相距超过 32 位),则不能使用指令中的立即数字段来有效地编码偏移量,而应该显式计算地址。代码模型对代码和数据的相对位置提供了各种限制。
如果您正在静态编译所有内容,那么“小”是安全的(并且是默认的)。如果您使用 JIT,那么一切皆有可能,尤其是在启用 ASLR 并且您需要使用中型/大型代码模型的情况下。
关于c++ - Clang/LLVM 中的 CodeModel 指的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40493448/
我是一名优秀的程序员,十分优秀!