提问人:TonySalimi 提问时间:11/9/2023 更新时间:11/9/2023 访问量:101
为什么 gcc 13.1 在包含 <iostream> 时不生成任何代码?
How come gcc 13.1 does not generate any code when including <iostream>?
问:
假设我有一个非常简单的程序,如下所示:
#include <iostream>
int main()
{
return 12;
}
使用 gcc(从 gcc-4.x 到 gcc-12.x)编译此程序时,生成的代码如下所示(在编译器资源管理器上在线查看):
main:
push rbp
mov rbp, rsp
mov eax, 12
pop rbp
ret
__static_initialization_and_destruction_0(int, int):
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-4], edi
mov DWORD PTR [rbp-8], esi
cmp DWORD PTR [rbp-4], 1
jne .L5
cmp DWORD PTR [rbp-8], 65535
jne .L5
mov edi, OFFSET FLAT:_ZStL8__ioinit
call std::ios_base::Init::Init() [complete object constructor]
mov edx, OFFSET FLAT:__dso_handle
mov esi, OFFSET FLAT:_ZStL8__ioinit
mov edi, OFFSET FLAT:_ZNSt8ios_base4InitD1Ev
call __cxa_atexit
.L5:
nop
leave
ret
_GLOBAL__sub_I_main:
push rbp
mov rbp, rsp
mov esi, 65535
mov edi, 1
call __static_initialization_and_destruction_0(int, int)
pop rbp
ret
这是可以接受的,因为头文件包含对象的静态变量(有关详细信息,请参阅此 Q/A)。<iostream>
ios_base::Init
但是从 gcc-13.1 开始,似乎包含 header 对生成的代码没有影响。那么,问题是,gcc-13.1 是如何做到这一点的呢?是由于头文件的更改吗?还是 gcc 在 13.1 版中的优化?<iostream>
iostream
答: 暂无答案
评论