出于性能原因,我必须在我的代码上使用-O2优化级别。问题是编译器会将短字符串(8字节或更少)提升为寄存器,例如:
__text:00000000001348DA mov rcx, 3D3D3D3D3D3D3D3Dh
__text:00000000001348E4 mov [rax+10h], rcx
__text:00000000001348E8 mov [rax+8], rcx
__text:00000000001348EC mov rcx, 3D3D3D3D3D3D3D0Ah等于加载字符串“\n====”。
我需要保持字符串作为数据常量,防止将它们提升到寄存器。为了提高性能,我必须保持-O2优化。clang基于LLVM 10。
我请求或帮助,因为我找不到一个标志,关闭这样的优化通过。
发布于 2020-07-19 13:01:52
将这些特定的字符串声明为volatile应该可以防止这种情况发生,但是,真正的问题是,为什么这对您不好?
https://stackoverflow.com/questions/62976407
复制相似问题