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은 메모리의 아래쪽 주소부터 위로 할당이 된다.