[CS] 메모리 구조(스택/힙/데이터/코드)

jake·2022년 11월 8일
0

CS

목록 보기
6/6

메모리 구조

프로그램을 실행시키면, 운영체제는 우리가 실행시킨 프로그램을 위해, 메모리 공간을 할당한다. 프로그램이 운영체제로부터 할당받는 메모리 공간은 다음과 같다.
1. 코드(code) 영역
2. 데이터(data) 영역
3. 스택(stack) 영역
4. 힙(heap) 영역

컴파일타임 vs 런타임

컴파일타임

프로그램을 만들기 위해 개발자는 먼저 소스코드를 작성하고 그 소스코드는 컴파일이라는 과정을 통해 기계어코드로 변환 되어 실행 가능한 프로그램이 된다. 이러한 과정을 컴파일타임(Compiletime)이라고 부른다.

런타임

컴파일과정을 마친 프로그램은 사용자에 의해 실행되며, 이러한 응용프로그램이 실행되는 때를 런타임(Runtime)이라고 부른다.

코드 영역

코드(Code) 영역은, 실행할 프로그램의 코드가 저장되는 영역으로, 텍스트 영역이라고도 부르며 컴파일타임에 결정된다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리한다. 컴파일 타임에 결정되고 중간에 코드를 바꿀 수 없게 Read-Only로 지정돼있다. 또한 프로그램이 시작하고 종료될 때까지 메모리에 계속 남아있는 특성이 있다.

데이터 영역

전역 변수와 static 변수가 할당되는 영역이다. 프로그램의 시작과 동시에 메모리에 할당되고, 프로그램이 종료되면 메모리에서 소멸된다. 전역변수,static값을 참조한 코드는 컴파일 하고 나면 Data 영역의 주소값을 가르키도록 바뀐다. 실행 도중에 전역변수가 변경 될 수도 있으니 이 영역은 Read-Write로 지정돼있다.

스택 영역

스택 영역은 프로그램이 자동으로 사용하는 임시 메모리 영역이다. 스택 영역은 컴파일타임에 결정된다. 함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역이고, 함수 호출이 완료되면 사라진다. 스택 영역에서 푸시(push) 로 데이터를 저장하고, 팝(pop)으로 데이터를 인출한다. 스택 영역은 후입 선출(LIFO, Last-In First-Out) 의 방식으로, 가장 나중에 들어온 데이터가 가장 먼저 인출 된다.

이는 스택 영역이 메모리의 높은 주소에서 낮은 주소의 방향으로 할당 되기 때문이다. 위의 그림으로 설명하면, 가장 아래(높은 주소)부터 차곡차곡 위(낮은 주소)의 방향으로 데이터가 쌓인다고 생각하면 된다.

힙 영역


힙 영역은 프로그래머가 직접 공간을 할당, 해제하는 메모리 공간이다. 따라서 힙 영역은 런타임에 결정된다. 힙 영역에서 malloc() 또는 new 연산자를 통해 메모리를 할당하고, free() 또는 delete 연산자를 통해 메모리를 해제한다. 힙 영역은 선입선출(FIFO, First-In First-Out)의 방식으로, 가장 먼저 들어온 데이터가 가장 먼저 인출 된다.

이는 힙 영역이 메모리의 낮은 주소에서 높은 주소의 방향으로 할당되기 떄문이다. 위의 그림으로 설명하면, 위(낮은 주소)부터 차곡차곡 아래(높은 주소) 방향으로 데이터가 쌓인다고 생각하면 된다.

0개의 댓글