스택 세그먼트(Stack Segment)는 프로세스의 스택이 위치하는 영역입니다.
함수의 인자나 지역 변수와 같은 임시 변수들이 실행중에 여기에 저장됩니다.
앞으로 살펴보겠지만, 스택 세그먼트는 스택 프레임 (Stack Frame)이라는 단위로 사용됩니다.
**스택 프레임은 함수가 호출될때 생성되고, 반환될 때 해제됩니다. 그런데 프로그램의 전체 실행 프름은 사용자의 입력을 비롯한 여러 요인에 영향을 받습니다.
—> 아래의 코드에서 유저가 입력한 choice에 따라 call_true()가 호출될 수도, call_false()가 호출될 수도 있습니다.
void func() {
int choice = 0;
scanf("%d", &choice);
if (choice)
call_true();
else
call_false();
return 0;
}
따라서, 어떤 ㅡㅍ로세스가 실행될 때, 이 프로세스가 얼마 만큼의 스택 프레임을 사용하게 될 지를 미리 계산하는 것은 일반적으로 불가능합니다. 그래서 운영체제는 프로세스를 시작할때 작은 크기의 스택 세그먼트를 할당해주고, 부족해 질 때마다 이를 할당해줍니다.
스택에 대해서 ‘아래로 자란다’라는 표현을 종종 사용하는데, 이는 스택이 확장될 때, 기존 주소보다 낮은 주소로 확장되기 때문입니다.
** 이 영역에는 CPU가 자유롭게 값을 읽고 쓸 수 있어야 하므로, 읽기와 쓰기권한이 부여됩니다.