Compiling the following code
int main() {
return 0;
}
gives the assembly
main:
xorl %eax, %eax
ret
https://gcc.godbolt.org/z/oQvRDd
If now iostream
is included
#include <iostream>
int main() {
return 0;
}
this assembly is created.
main:
xorl %eax, %eax
ret
_GLOBAL__sub_I_main:
subq $8, %rsp
movl $_ZStL8__ioinit, %edi
call std::ios_base::Init::Init() [complete object constructor]
movl $__dso_handle, %edx
movl $_ZStL8__ioinit, %esi
movl $_ZNSt8ios_base4InitD1Ev, %edi
addq $8, %rsp
jmp __cxa_atexit
Full optimization is turned on (-O3).
https://gcc.godbolt.org/z/EtrEX8
Can someone explain, why including an unused header changes the binary. What is _GLOBAL__sub_I_main:
?
question from:
https://stackoverflow.com/questions/52079248/include-of-iostream-leads-to-different-binary 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…