2010-07-03 5 views
8

컴파일러는 C++에서 기본 인수 값을 어디에 저장합니까? 글로벌 힙, 스택 또는 데이터 세그먼트?C++ 기본 인수 값

감사 잭

답변

31

그들은 반드시 어디에도 저장되지 않습니다. 가장 간단한 경우, 컴파일러는 누락 된 인수가있는 것처럼 함수 호출을 정확히 컴파일합니다. 예를 들어

, f()에 두 통화

void f(int a, int b = 5) { 
    cout << a << b << endl; 
} 

f(1); 
f(1, 5); 

은 가능성이 정확히 같은 어셈블리 코드로 컴파일됩니다. 컴파일러에게 객체 코드에 대한 어셈블리 목록을 생성하도록 요청함으로써이를 확인할 수 있습니다.

내 컴파일러는 생성 : 당신이 볼 수 있듯이

movl $5, 4(%esp) ; f(1) 
    movl $1, (%esp) 
    call __Z1fii 

    movl $5, 4(%esp) ; f(1, 5) 
    movl $1, (%esp) 
    call __Z1fii 

가, 생성 된 코드는 동일하다.

+9

+1 - 기본 인수가 구현 파일이 아닌 헤더 파일에 지정되는 이유입니다. –

+0

+1 나는 이것에 대해 깊이 생각해 본 적이 없지만 당신의 대답은 완벽합니다. 또한 사물을 상당히 단순화합니다. C++을 사용하기 시작했을 때 가상 함수가 기본 매개 변수 값을 가질 때 어떻게 오버라이드 될 수 있는지 궁금했습니다. 기본 값이 어떻게 든 시그니처를 수정하거나 더 많은 함수를 생성한다고 생각했지만 호출 사이트에서 처리 (함수 자체에 아무 것도하지 않음)하는 것이 가장 적합합니다. – stinky472

+2

@stinky : 기본값을 변경하면 클라이언트가 다시 컴파일해야 함을 의미합니다 ... – fredoverflow