我在没有优化选项的https://godbolt.org/z/9xWvzcdbq和有优化选项的https://godbolt.org/z/9WTocce97中尝试了以下代码-O2
没有优化选项的版本生成43行汇编指令,指令bl std::atomic<int*>::load(std::memory_order) const
,而具有-O2优化选项的版本生成49行汇编指令,数据存储器屏障dmb ish
。
这是预期的吗?为什么?部分原因是因为带有-O2优化选项的版本通过将指令bl std::atomic<int*>::load(std::memory_order) const
分解为更多指令来优化它吗?
#include <atomic>
#include <iostream>
void print(int* val)
{
std::cout << *val << std::endl;
}
int main()
{
int x{42};
std::atomic<int*> p = &x;
int* local = p.load(std::memory_order_consume);
print(local);
}
字符串
1条答案
按热度按时间unguejic1#
默认情况下,编译器资源管理器隐藏库函数定义。如果您取消选择“过滤器>库函数”,您会注意到非优化版本实际上生成了143行汇编,而优化版本只有52行汇编。由于函数内联,
-O2
中的库函数定义被优化了。