2012-01-19 2 views
1

가능한 중복 :
In C, do braces act as a stack frame?문장 블록을 입력 할 때 새로운 스택 프레임이 생성됩니까?

int main() 
{ 
    int i=10; 

    { 
     int i=100; 
     printf("%d", i); 
    } 
} 

윌 내부 "{"와 "}"새로운 스택 프레임을 만들?

+2

[THIS] [1] 당신은 매우 명확합니다. [1] : http://stackoverflow.com/questions/2759371/in-c-do-braces-act-as-a-stack-frame – DonCallisto

+2

@DonCallisto 참고로, 의견, 사용자가 만든 링크 '[link_title] (http : // link-url /)'- 이것은 질문에서도 작동합니다. –

+0

@ RichardJ.RossIII 정보를 제공해 주셔서 감사합니다. – DonCallisto

답변

6

이것은 전적으로 구현에 따라 다르지만 그 밖의 구현에서는 대답이 '아니오'입니다. 두 개의 i 변수는 일반적으로 동일한 스택 프레임에서 두 개의 개별 변수로 구현되지만이 경우 첫 번째 i은 모두 생략 할 수 있습니다.

i386에서 스택 프레임을 작성하는 것은 서브 루틴을 호출 할 때만 필요합니다 (리턴 주소 만있는 경우에도 있음). 이것은 귀하의 경우에는 발생하지 않습니다.

1

아마도. 아마 아닐거야. lanaguage는 그것을 필요로하지 않으므로 컴파일러는 원하는대로 자유롭게 할 수 있습니다.

2

컴파일러가 가려움을 느끼는 경우에만. 확실히 언어 요구 사항은 없습니다. 좀 더 구체적으로 말하자면, 어떤 컴파일러가 매우 많은 수의 지역 주민을 위해 스토리지를 최적화하는 것을 제외하고는 프레임을 여기에 밀어 넣으려는 충동을 느낄 것이라고는 생각할 수 없습니다. 컴파일러는 런타임 프레임없이 이름을 완벽하게 관리 할 수 ​​있습니다.

관련 문제