我正在看一个旧视频Jason Turner:实用表演实践。
一开始就有一个 GCC 5.1 中优化代码的示例:
#include <string>
int main() {
return std::string("a").size();
}
编译为“无”:
main:
mov eax, 1
ret
但是,我很惊讶地看到 GCC 13.2 的另一个输出:
main:
sub rsp, 40
lea rax, [rsp+16]
mov rdi, rsp
mov QWORD PTR [rsp+8], 1
mov QWORD PTR [rsp], rax
mov eax, 97
mov WORD PTR [rsp+16], ax
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_dispose()
mov eax, 1
add rsp, 40
ret
https://godbolt.org/z/45PWox4Gb
优化器坏了吗?