C++/개인메모

메모리의 구조

K.DJ 2022. 12. 13. 14:43

1. 코드 영역

실행할 프로그램의 코드가 저장되는 영역.

CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리함.

 

2. 데이터 영역

프로그램의 전역 변수정적(static) 변수가 저장되는 영역.

프로그램의 시작과 함께 할당되며 종료될때 같이 소멸함.

 

3. 스택 영역

함수가 호출될때 해당 함수의 지역 변수와 매개 변수가 저장되는 영역.

함수가 완료되면 같이 소멸함.

스택 영역은 메모리의 높은 주소(아래)에서 낮은 주소(위) 방향으로 할당되므로

후입선출(나중에 들어온 것이 먼저 나옴)의 방식으로 데이터를 관리함.

CPU에서 관리하며 크기가 정해져있음.

코드 영역, 데이터 영역, 스택 영역은 컴파일 단계에서 메모리 공간을 할당받으므로 '정적 할당'에 해당한다.

하지만 스택 영역은 함수가 호출될때마다 새로운 데이터가 채워지므로 '정적 할당'된 '동적 메모리'라고 할 수 있다.

 

4. 힙 영역

사용자가 직접 관리해야하는 메모리 영역.

사용자에 의해 메모리 공간이 동적으로 할당(new)되거나 해제(delete)됨.

힙 영역은 메모리의 낮은 주소(위)에서 높은 주소(아래) 방향으로 할당되므로

선입선출의 방식으로 데이터가 관리됨.

메모리 크기 제한이 없지만 스택 영역에 비해 액세스(할당, 해제)가 느리다.

컴파일 단계가 아닌 런타임(실행) 단계에서 사용자에 따라 메모리가 할당, 해제되므로 '동적 할당'이라고 한다.