강께르의 개발일지
[C++] 메모리 영역에 대한 조사 및 정리 본문
1. 메모리는 무엇인가?
- Random Access Memory, RAM
- 현재 실행 중인 프로그램이나 데이터가 저장되어 있으며 실시간으로 사용된다.
- 컴퓨터 전원이 꺼지면 가지고 있는 데이터를 모두 날리는 휘발성이 특징
- 주기억 장치라고 부르며, 여기에 입력된 데이터는 중앙처리장치(Central Processing Unit, CPU)에 의해 처리되며 그에 대한 수행에 필요한 명령어나 데이터를 기억하고 있는 곳
- 데이터 처리 속도가 빠른 중앙처리장치와 그에 비해 한참 느린 보조 기억 장치 사이에 위치하여 메모리가 처리 속도를 보완하는 역할
2. 메모리 영역
메모리 영역은 크게 4가지로 구분이 되며, 이는 코드, 데이터, 스택, 힙으로 구분이 된다. 사용자는 운영체제에 요청을 해 프로그램을 실행한다. 이 때 프로그램은 주기억장치인 메모리에 로드된다. 그리고 CPU가 프로그램 코드를 가져다 메모리를 관리하며 명령문을 실행하고 동적메모리가 할당되거나 스택메모리가 할당되면 그에 사용되어질 메모리 영역을 쓴다.
- 코드 영역
코드 영역은 텍스트 영역이라고 부르며, 실행할 프로그램의 코드가 저장되는 영역이다. CPU는 이 영역에 저장된 명령어를 가져가 처리한다. 컴파일 타임에 이 영역은 결정되고 그 후 중간에 코드를 바꿀 수 없게 읽기 전용으로 지정된다. HEX파일이나 BIN 파일 메모리라고 한다.
- 데이터 영역
데이터 영역은 프로그램의 전역 변수와 정적 변수가 저장되는 영역이다. 배열, 구조체 또한 저장이 된다. 초기화된 데이터는 이 영역에 저장되고, 초기화되지 않은 데이터는 Block Stated Symbol 영역에 저장된다고 한다. 프로그램이 실행될 때 할당되고 프로그램이 종료 시 소멸되는데 변수가 변경될 수 있으니 읽기와 쓰기가 둘 다 가능하다. 함수 내부에 선언된 정적 변수는 프로그램 실행 시 공간만 할당되고, 그 함수가 실행될 때 초기화된다.
- 스택 영역
스택 영역은 함수의 호출과 관계된 지역변수, 매개변수, 리턴값이 저장되는 영역이다. 함수 호출과 함께 할당되고 함수 호출 완료 시 소멸된다. 스택 영역에 저장되는 함수 호출 정보는 스택 프레임이라고 한다. 프로그램이 자동으로 사용하는 영역이기에 명령 실행 시 자동으로 증가, 감소하며 보통 메모리의 마지막 번지를 지정하여 사용한다. 스택 영역은 후입선출 방식에 따라 동작하며, 푸시 동작으로 데이터를 저장하고, 팝 동작으로 데이터를 꺼낸다.
- 힙 영역
힙 영역은 사용자가 직접 관리하는 영역이다. 사용자에 의해 동적으로 메모리를 할당하는 경우 이 영역을 사용한다. 힙 영역과 스택 영역은 같은 공간을 공유하는데 힙은 메모리의 낮은 주소에서부터 높은 주소로 순차적으로 사용한다면, 스택은 높은 주소에서부터 낮은 주소로 역순으로 사용한다. 만약 각 영역이 상대 공간을 침범한다면 이를 힙 오버플로우, 스택 오버플로우라고 말한다.
'프로그래밍 > C++' 카테고리의 다른 글
[C++] enum과 enum class (0) | 2021.06.10 |
---|---|
[C++] void 포인터와 함수형 포인터 (0) | 2021.06.10 |
[C++] Call by value / address / reference (0) | 2021.06.09 |
[C++] 함수 / 함수 오버로딩 / 디폴트 매개변수 (0) | 2021.06.07 |
[C++] 자료형에 대한 조사 및 정리 (0) | 2021.06.02 |