Joh*_*nck 8 c++ optimization gcc g++
考虑以下代码:
#include <array>
class C
{
std::array<char, 7> a{};
int b{};
};
C slow()
{
return {};
}
C fast()
{
C c;
return c;
}
Run Code Online (Sandbox Code Playgroud)
GCC 6到9产生了非常肿的代码slow():
slow():
xor eax, eax
mov DWORD PTR [rsp-25], 0
mov BYTE PTR [rsp-21], 0
mov edx, DWORD PTR [rsp-24]
mov DWORD PTR [rsp-32], 0
mov WORD PTR [rsp-28], ax
mov BYTE PTR [rsp-26], 0
mov rax, QWORD PTR [rsp-32]
ret
fast():
xor eax, eax
xor edx, edx
ret
Run Code Online (Sandbox Code Playgroud)
两种功能在含义上有区别吗?Clang会发出fast()两种代码,而GCC 4-5比6-9更好,但也不是最优。
构建标志: -std=c++11 -O3
演示:https://godbolt.org/z/rPNG9o
根据此处的反馈作为GCC错误提交:https : //gcc.gnu.org/bugzilla/show_bug.cgi?id=90883
GCC 维护者同意这是一个错误(错过了优化),并且已在 x86_64 的主干中修复(ARM 可能稍后修复):https://gcc.gnu.org/bugzilla/show_bug.cgi ?id=90883
| 归档时间: |
|
| 查看次数: |
262 次 |
| 最近记录: |