23.08.17 19:46 작성
·
948
0
스택의 크기는 컴파일 타임에 결정되므로 정적 할당 영역 이다.
스택의 크기는 런타임에 크기가 변할 수 있는 동적 항당 영역이다.
스택의 크기는 컴파일 타임에 결정되므로(예로 100) 정적할당이면서, 런타임에 스택에 데이터가 저장됨에 따라 스택의 크기는 10, 20, 30, 20, 15 이런식으로 변할 수 있으니까, 동적 할당 영역이기도 하다.
특정 책에서는 스택을 동적 할당 영역이라고 설명하고, 특정 대학 강의에서는 스택은 컴파일 타임에 크기가 결정된다고 설명합니다. 해당 강의에서는 이에 대한 내용이 없는 것 같은데, 어떤 설명이 맞는건지 궁금합니다.
답변 1
0
우선 스택은 정적 할당 영역, 힙은 동적 할당 영역입니다. 블록 내에 int a
으로 선언되어있다면 integer 자료형 크기만큼 메모리에 할당을 하겠죠. 이것은 컴파일 타임에 결정되고, 런타임에 a
변수에 할당된 메모리 크기는 변하지 않으니 스택 영역은 정적으로 할당되는 메모리라는 것입니다.
하지만 프로세스는 코드를 순차적으로 수행하기 때문에 프로세스의 실행 과정에 따라 블록에 들어갔다 나왔다 할 것이고, 이에 따라 스택에는 메모리가 할당되었다가 해제되었다가 할 것입니다. 즉, 가변적으로 그 크기가 변하게 되는 것이죠.
예를 들어 main
함수 실행 중에 func()
라는 함수가 호출이 되면, 그 순간 SP가 이동하며 스택 프레임과 함께 그 함수 내의 지역 변수가 스택 영역에 할당이 될 것입니다. 그럼 자연스럽게 func()
호출 전의 스택보다는 스택 프레임 크기 + 지역 변수 메모리 크기만큼 func()
호출 후의 스택의 크기가 커지겠죠?
이런 관점에서는 런타임에 크기가 변할 수 있는 영역입니다. 알고 계신 바와 같이, 사실 이건 스택 뿐만 아니라 크게 보면 모든 메모리가 그러합니다. OS의 관리 아래 끊임없이 프로세스나 스레드를 실행하고 종료하니까요. 이건 너무 당연한 일이기 때문에 그냥 스택은 정적 할당 영역이라고 생각하시는게 편할 것 같습니다.
오래된 질문이지만 지나가다가 답변달아봅니다.
2023. 08. 21. 18:14
답변 감사합니다.
그런데 "혼자 공부하는 컴퓨터구조 운영체제"라는 책에서
"힙 영역과 스택 영역은 프로세스 실행 과정에서 그 크기 가 변할 수 있는 영역입니다. 그래서 이 두 영역을 동적 할당 영역이라고도 부르지요." 라고 설명하는데, 어떻게 해석해야할지 어렵네요 ㅎㅎ;