让我们考虑C和C++中的以下hello world示例:
#include <stdio.h>
int main()
{
printf("Hello world\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
int main()
{
std::cout<<"Hello world"<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我在godbolt中将它们编译为汇编时,C代码的大小只有9行(gcc -O3):
.LC0:
.string "Hello world"
main:
sub rsp, 8
mov edi, OFFSET FLAT:.LC0
call puts
xor eax, eax
add rsp, 8
ret
Run Code Online (Sandbox Code Playgroud)
但是C++代码的大小是22行(g++ -O3):
.LC0:
.string "Hello world"
main:
sub rsp, 8
mov edx, 11
mov esi, OFFSET FLAT:.LC0
mov edi, OFFSET FLAT:_ZSt4cout
call std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> …Run Code Online (Sandbox Code Playgroud)