메모리 구조
- 컴퓨터의 메모리영역는 프로세스의 주소공간으로 구성되어 있으며, 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 변수, 매게 변수 등
한편, 스택영역과 힙영역은 사실상 같은 영역을 사용하며 스택영역은 높은 주소에서 낮은 주소로, 힙영역은 낮은 주소에서 높은 주소로 데이터가 할당된다.
'C언어' 카테고리의 다른 글
02. C언어_표준 입력 함수 (0) | 2024.05.15 |
---|---|
06. C언어_포인터 변수 연산자, 주소 연산자 (0) | 2024.05.15 |
03. C언어_동적 메모리 할당(1차원 배열) (0) | 2024.05.15 |
04. C언어_동적 메모리 할당 (2차원 배열) (0) | 2024.05.15 |
05. C언어_문자열(String) 관련 function (0) | 2024.05.15 |