c언어

[c언어] 메모리 구조

하늘아래현서 2022. 7. 6. 17:33

프로그램을 실행하면 해당 프로그램을 가져와 메모리에 올리게 된다.

운영체제는 프로그램이 사용할 메모리 영역을 크게 4가지 영역에 할당한다.

1. 코드(Code) 영역

- 기계어로 번역된 소스 코드를 저장하는 영역으로 흔히 text 영역이라고도 한다.

- 프로그램 실행을 위한 모든 명령문들이 저장되어 있다.

 

2. 데이터(Data) 영역

- 전역 변수, 정적(static) 변수, 초기 문자열 상수, 초기 리터럴 상수가 할당되는 영역.

- 프로그램 시작하면 할당하고, 프로그램 종료하면 메모리에서 해제한다.

3. 스택(Stack) 영역

- 함수 호출 시 생성되는 지역 변수, 지역 함수, 매개 변수가 저장된다.

- 이는 컴파일할 때 크기를 결정한다.

- 함수 호출이 완료되면 사라진다.

4. 힙(Heap) 영역

- 필요에 따라 메모리 크기를 run time 동안 결정하여 동적으로 메모리 할당을 할 때 쓰인다.

- data 영역이나 stack 영역은 컴파일러가 미리 공간을 예측하여 할당하지만

  힙 영역에 할당되는 동적 변수는 다른 영역에서 할당하고 남은 빈 공간이다.

 

이 때 heap과 stack은 같은 메모리 영역을 공유하고 있다.

heap은 메모리의 위쪽 주소부터 아래로 할당이 되는 반면

stack은 메모리의 아래쪽 주소부터 위로 할당이 된다.