gpt4 book ai didi

c++ - gcc 是否错过了优化 ctor 初始化列表的机会?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:40 26 4
gpt4 key购买 nike

考虑这两个结构(合法的 C++11 及更高版本):

struct A {
unsigned int a = 5;
} a;

struct B {
unsigned int b;
B() : b(5) {}
} b;

As far as I understood , ab 应该产生完全相同的代码。

clang (8.0.0) 完成了我的预期并生成了以下程序集:

a:
.long 5 # 0x5
b:
.long 5 # 0x5

g++ (9.1) 似乎错过了这个优化机会:

_GLOBAL__sub_I_a:
mov DWORD PTR b[rip], 5
ret
b:
.zero 4
a:
.long 5

See the code on godbolt . g++ 编译成的内容等同于此:

struct C {
unsigned int c;
C() { c = 5; } // initialize + assign
} c;

这出乎我的意料,尤其是因为我使用 -O3 进行编译。这是“优化错误”吗?

最佳答案

答案只是"is",但值得一提的是允许优化的原因。允许执行 initialize anything statically如果它能证明某些副作用不会因此发生在错误的时间。该分析可能很复杂,这大概就是 GCC 不在此处费心的原因。

关于c++ - gcc 是否错过了优化 ctor 初始化列表的机会?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56789066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com