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


소스코드

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

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

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


조회수 248


1 답변


좋아요
0
싫어요
채택취소하기

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

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

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

  • 2016년 02월 01일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close