C는 {}마다 stack이 할당 되나요?

소스코드

void foo() {
   int c[100];
   {
       int d[200];
   }
   //d[0]=1; //에러
   return;
}

if나 for같은 상황이아니라 그냥 {}를 하나 더 썼을 뿐인데 블록을 빠져나오니까 d를 못쓰게 됬습니다.

교수님이 강의시간에 {}는 블록이라고 했는데 그럼 이 블록마다 스택이 올라갔다가 내려갔다가 하는 건가요?

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    질문하신 것 같이 brace의 맨 윗줄에 변수등을 선언할 수 있고, 영역을 벗어나면 더 이상 그 식별자를 쓸 수 없기 때문에 프로그래머가 보기에는 스택과 비슷한 느낌일 수 있지만.

    C의 brace({, })는 stack frame이 아니고 naming scope이기 때문에 brace에 진입했다고 해서 스택에 push/pop하는 일은 없습니다.

    질문하신 코드는 이론적으로 배열 dfoo함수 전체에서 메모리를 잡고 있습니다.

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.