프로그램의 메모리(code, data, heap, stack) Basic Languages2016. 8. 15. 02:11
대충 이런 식
0x0100 ~ 0x1000
코드 - 데이터(+bss) - 힙 - 스택
컴파 일타임에 크기 결정
code(text) : 프로그램의 코드가 들어가는 곳
data : 전역변수 등
(bss : 초기화가 안 된 전역변수)
런 타임에 크기 결정
heap : 동적할당변수
stack : 함수변수(지역변수, 파라미터)
tip)
낮은 메모리 순서로 콧대휘어쓰(코데힙스 = code data heap stack의 두음을 딴 것)......라고 외우면 된다는 전설적인(?) 이야기를 듣고 그대로 외우고 있다.
메모리 순서가 안외워져서 머리를 책상에 박았더니 콧대가 휘었더라..=_=;; 뭐 대충 이런 이야기였다.
안외워지면 저렇게라도 외워야지 뭐 어쩌겠어.
근데 사실 이해를 제대로 하면 외울 필요가 없다.
아래 글을 보고 이해를 해 보자.
일단 코드와 데이터는 compile-time에 크기가 결정된다.
여기는 코드 저장소...
code : 말 그대로 소스코드 들어가는 곳이다. 그 외 나머지는 일단은 모조리 변수가 들어가는 곳이라고 보면 된다. 상식적으로 당연히 낮은 메모리부터 채워나간다는 것...
여기서부턴 변수 저장소 시리즈...
data : 데이터를 저장할 수 있는 곳은 변수다. 가장 먼저 등장하는 것은 가장 중요한 것이어야 한다.
변수 중 프로그램에 가장 광범위하게 영향을 미칠 수 있는 것이 전역변수다.
그러므로 code영역의 바로 뒤인 data영역에 저장한다.
(bss : 초기화가 되지 않은 전역변수는 여기에 저장한다. 굳이 data 영역과 왜 나눴는지는 모름.)
다음으로 힙과 스택은 run-time에 크기가 결정된다.
heap : 동적할당 변수를 위한 공간이다. 프로그래머가 관리할 수 있는 영역이기 때문에 낮은 메모리부터 오름차순으로 올라가는 것이 개발자가 알기 편하다(실제로 그런 이유 때문인지는 잘 모르겠다)고 생각하면 될 것 같다.
stack : 함수 호출과 관련된 메모리를 관리하는 영역이다. 프로그램 전체에 할당된 메모리영역의 맨 뒷주소부터 차례로 내려오면서 스택메모리가 쌓이게 된다. call-stack을 추적하는 것도 최근에 불린 함수부터 역으로 추적하기 때문에 왠지 뒤에서부터 쌓이는 것이 자연스러울 것 같다.
'Basic Languages' 카테고리의 다른 글
개발을 배울 수 있는 곳 (0) | 2016.08.07 |
---|