메모리 구조에 대한 설명
프로그램이 실행되기 위해서는 먼저 메모리 공간이 할당되어야 하는데요!
프로그램이 실제로 CPU에서 실행되기 전에 메모리 공간이 먼저 할당되고, 그 이후 프로그램이 실행됩니다.
이를 위해서 OS는 메모리(RAM)에 공간을 할당해 주는데,
이 메모리 공간은 크게 네 부분으로 구성되어 프로그램의 다양한 요소를 저장합니다.
코드 영역
코드 영역은 텍스트 영역이라고도 불리며, 이 영역은 실행할 프로그램의 코드가 저장되는 영역입니다.
(코드 영역에 저장되는 코드는 컴파일러에 의해 컴파일된 소스코드의 기계어 코드입니다!)
코드 영역 내에는 다음과 같은 내용이 주로 저장됩니다.
함수 : 코드 내에 작성된 함수와 메서드
상수 : 코드 내에 직접 입력된 정수, 실수, 문자열 등의 리터럴 값
제어문 : 반복문이나 조건문, 분기문과 같이 프로그램의 흐름을 제어할 때 사용하는 실행문
실행 도중 코드가 변경되지 않도록 읽기 전용으로 지정되어 있습니다.
데이터 영역
- 데이터 영역은 전역 변수와 static 변수가 할당되는 영역입니다.
- 프로그램의 실행시, 함수 호출 전에 할당되고 프로그램이 종료되어야 소멸되기 때문에
프로그램 종료시 까지 지워지지 않을 데이터를 저장합니다. - 실행 도중 전역변수가 변경될 수 있어서 읽기,쓰기 전용으로 지정되어 있습니다.
힙 영역
- 개발자가 직접 할당/해제 하는 메모리 공간 입니다.
- 이 공간에 메모리 할당하는 것을 동적할당 이라고도 부릅니다. - 런타임에 크기가 결정됩니다.
- 컴파일 과정을 마친 프로그램이 사용자에 의해 실행되고, 이러한 응용 프로그램이 동작되는 시점을
런타임 이라고 부릅니다. - 메모리가 낮은 주소에서 높은 주소 방향으로 할당되기 때문에 선입선출(FIFO) 방식으로 작동됩니다.
스택 영역
- 프로그램이 자동으로 할당/해제하는 임시 메모리 영역입니다.
- 함수 호출 시 생성되는 지역변수와 매개변수가 저장되고, 함수 호출이 완료되면 사라집니다. - 컴파일 타임에 크기가 결정됩니다.
- 즉, 프로그램이 컴파일 되는 시점에 해당 메모리의 크기가 정해집니다. - 메모리는 높은 주소에서 낮은 주소 방향으로 할당되며, 후입선출(LIFO) 방식으로 작동됩니다.
힙과 스택 영역
힙 영역과 스택 영역은 사실 같은 공간을 공유하고 있습니다.
하나의 공간을 두고 힙 영역은 위에서 아래로, 스택 영역은 아래에서 위로 할당됩니다.
이 때, 서로의 메모리 영역을 침범하게 되는 것을 각각 힙 오버플로우, 스택 오버플로우 라고 합니다.
때문에 힙과 스택 영역의 크기는 서로 반비례 하게 됩니다.
'[게임 개발] CS 공부' 카테고리의 다른 글
OOP의 5대 원칙 (0) | 2023.11.08 |
---|---|
프로세스와 스레드 (0) | 2023.11.07 |