메모리 구조
[TOC]
Text
텍스트 영역은 아주 쉽게 말하면 코드를 실행하기 위해 저장되어있는 영역이다. 흔히 코드 영역이라고도 하는데, 프로그램을 실행시키기 위해 구성되는 것들이 저장되는 영역이다.
명령문들이 저장되는 것인데, 제어문, 함수, 상수들이 이 영역에 저장된다.
Data
데이터 영역은 작성한 코드에서 전역변수, 정적변수 등이 저장되는 공간이다. 이들의 특징을 보면 보통 메인함수 전에 선언되어 프로그램이 끝날 때 까지 메모리에 남아있는 변수들이라는 특징이 있다.
Data영역은 크게 두 가지로 나뉜다
초기화 된 변수 영역(initialized dadta segment)
초기화되지 않은 변수 영역(uninitialized data segent)
초기화되지 않은 변수 영역은 BBS(Block Started by Symbol) 이라고도 한다.
Heap
힙 영역은 ‘사용자에 의해 관리되는 영역’이다. 동적으로 할당 할 변수들이 여기에 저장된다고 보면된다.
Java나 C++에서 new 연산자로 생성하는 경우 또는 class, 참조 변수들도 Heap영역을 차지하게 된다.
언어마다 조금씩 상이하니 ‘동적 할당 영역’이라고 알면 된다.
Heap 영역은 대개 ‘낮은 주소에서 높은 주소로 할당(적재)된다.’
Stack
스택 영역은 함수를 호출 할 때 지역변수, 매개변수들이 저장되는 공간이다. 함수가 종료되면 해당 함수에 할당된 변수들을 메모리에서 해제시킨다. Stack 자료구조의 pop와 같은 기능이다.
재귀 함수를 호출할 때, 재귀가 깊어져 Stack Overflow를 경험해보았을것이다. Stack Overflow가 발생하는 이유가 재귀를 반복적으로 호출하면서 Stack 메모리 영역에 해당 함수의 지역변수, 매개변수들이 계속 할당되다가 OS에서 할당해준 Stack영역의 메모리 영역을 넘어버리면 발생하는 오류이다.
Stack영역은 Heap영역과 반대로 높은주소에서 낮은주소로 메모리에 할당된다.