C 및 C ++의 다음 hello world 예제를 고려하십시오.
#include <stdio.h>
int main()
{
printf("Hello world\n");
return 0;
}
#include <iostream>
int main()
{
std::cout<<"Hello world"<<std::endl;
return 0;
}
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
그러나 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> >&, char const*, long)
mov edi, OFFSET FLAT:_ZSt4cout
call std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)
xor eax, eax
add rsp, 8
ret
_GLOBAL__sub_I_main:
sub rsp, 8
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
add rsp, 8
jmp __cxa_atexit
... 훨씬 큽니다.
C ++에서는 먹는 것을 지불하는 것이 유명합니다. 그래서이 경우, 나는 무엇을 지불하고 있습니까?
eat
C ++과 관련된 용어를 들어 본 적이 없습니다 . 나는 당신이 의미하는 것을 믿는다 : "당신이 사용한 것에 대해서만 지불 하는가?"
eat
가 더 모호하므로 피해야 함을 나타냅니다.