Компиляция следующего кода
int main() {
return 0;
}
дает сборку
main:
xorl %eax, %eax
ret
https://gcc.godbolt.org/z/oQvRDd
Если теперь включен iostream
#include <iostream>
int main() {
return 0;
}
эта сборка создана.
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
Включена полная оптимизация (-O3). https://gcc.godbolt.org/z/EtrEX8
Может кто-то объяснить, почему включение неиспользуемого заголовка изменяет двоичный файл. Что такое _GLOBAL__sub_I_main: