C언어

01. C언어_컴퓨터의 메모리 구조

만수르코딩방 2024. 5. 15. 16:45

메모리 구조

- 컴퓨터의 메모리영역는 프로세스의 주소공간으로 구성되어 있으며,  4가지의 가상 공간으로 나뉘어져 있다 (code, data, heap, stack)

 

프로그램의 메모리 배치

1. Code (Read Only)

- 사용자가 작성한 프로그램 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환하여 저장되는 공간으로 프로그램이 실행되고 끝날 때까지 메모리에 남아있음

- 구성 요소  : 명령어(기계어 코드)

 

2.1 Data (Read Only & Read write) 

- 변수, 상수 등의 프로그램이 사용하는 데이터를 저장하는 공간으로 프로그램이 실행되고 끝날 때까지 메모리에 남아있음

- 구성 요소 : 문자열 상수(RO), 정적 변수(RW), 초기화된 외부 변수(RW) 등

 

2.2 BSS (Read write)

- Data영역의 일부로, 초기화 되지 않은 데이터를 저장하는 공간이다.

- 구성요소 : 초기화되지 않거나 0으로 초기화된 외부 및 정적 변수

 

3. Heap (Read write delete)

- 프로그램의 Runtime시(=프로그램이 실행되는 도중)에 프로그래머의 의도대로 메모리가 할당되고 소멸된다.

- 구성요소 : 동적 할당 메모리

 

4. Stack (Read write)

- 프로그램의 Compile 시에 stack 영역에 메모리가 할당되며 함수를 빠져나올 때 소멸된다. 프로그램 컴파일 시 얼마만큼의 크기로 메모리를 할당해야하는지 정해지기 때문에 컴파일 이후 크기가 변경될 수 없다. 

- 구성요소 : 지역변수, auto 변수, 매게 변수 등

 

한편, 스택영역과 힙영역은 사실상 같은 영역을 사용하며 스택영역은 높은 주소에서 낮은 주소로, 힙영역은 낮은 주소에서 높은 주소로 데이터가 할당된다.