컴퓨터의 메모리 구조, 스택 프레임

노현아·2024년 3월 26일

컴퓨터의 메모리 구조에 대해

프로그램이 실행되려면 먼저 프로그램이 메모리에 로드되어야 한다.
프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.

컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공한다.

프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은
코드, 데이터, 힙, 스택 영역이다.

위 영역들의 나열 순서는 메모리의 낮은 주소에서 높은 주소 순서와 같다. 가장 낮은 주소는 코드 영역으로, 실행할 프로그램의 코드를 로드하는 곳이다. 그보다 높은 주소 즉 데이터 영역에는 전역 변수나 정적 변수 등 프로그램 실행에 필요한 메모리를 배치한다.

힙과 스택은 하나의 영역을 나누어 함께 사용하지만 각각 런타임과 컴파일타임에 크기가 결정된다. 결정된 크기를 넘어서는 것을 오버플로우라고 하는데 힙이 넘치면 힙 오버플로우, 스택이 넘치면 스택 오버플로우라고 한다. 힙은 낮은 주소에서 높은 주소로 가면서 메모리를 사용하고 스택은 높은 주소에서 낮은 주소로 가면서 메모리를 사용한다.

데이터 영역은 프로그램이 시작되면서 할당되고 프로그램이 종료되면서 사라진다. 데이터 영역에 전역 변수가 정적 변수가 저장된다면 스택 영역에는 지역 변수와 매개변수가 저장된다. 스택 영역은 함수 호출과 함께 할당되고 함수가 리턴되면 소멸한다.

스택은 push와 pop으로 데이터를 저장, 인출한다. LIFO 방식이기 때문에 늦게 저장된 데이터가 가장 먼저 인출된다. (최근에 사용한 정보에 먼저 접근)

스택 프레임

함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장된다. 이렇게 스택에 차례차례 저장되는 함수 호출 정보를 스택 프레임이라고 한다.

함수의 재귀 호출이 무한히 반복되면 스택 프레임이 계속 쌓여 스택의 모든 공간을 차지하고 더 이상 여유 공간이 없게 된다. 해당 프로그램은 스택 오버플로우에 의해 종료된다.

profile
성실함과 끊임없는 학습을 통해 성장하는 개발자 지망생입니다. 새로운 도전과 배움을 즐기며 더 나은 코드를 꿈꿉니다.

0개의 댓글