IT 블로그 !!

메모리 구조 본문

관련지식들

메모리 구조

IT_Try 2018. 10. 1. 08:38

프로그램을 실행시키려면 운영체제는 메모리(RAM)에 공간을 할당해 줍니다.

OS는 총 다음과 같이 다양한 메모리를 제공하고 있습니다.



위의 그림은 아래쪽이 높은 주소, 위가 낮은 주소입니다.

 


1. Code 영역

Code영역은 실행할 프로그램의 코드가 저장되는 영역입니다. Text영역이라고도 불리지요.

프로그램의 코드는 저장될 때 기계어의 형태로 저장됩니다.

읽기 전용 데이터가 저장됩니다.

CPU는 코드 영역의 명령어를 하나씩 가져가 처리합니다.

 

 

2. Data 영역 (Data + Bss)

프로그램의 전역, 정적(Static)변수가 저장되는 영역입니다.

프로그램 시작과 동시에 할당되고 프로그램 종료 시 메모리에서 소멸됩니다.

Data에는 초기화 된 전역변수, Bss에는 초기화 되지 않은 전역변수가 저장됩니다.


 

3. Heap 영역

프로그래머가 동적 할당/해제하는 메모리 공간입니다.

메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.


 

4. Stack 영역

함수를 호출할 때 사용되는 지역 변수, 매개변수, 리턴 값 등의 임시 데이터를 저장하는 영역입니다.

함수 시작과 함께 할당되고, 함수 종료 시 소멸합니다.

스택영역에 저장되는 함수와 관련된 호출 정보를 스택 프레임(Stack Frame)이라고 합니다.

후입선출(LIFO Last In First out)로 동작합니다.

메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.

 


그림에서 가운데 부분에 두꺼운 선을 기준으로따라 

위의 Code, Data, Bss영역은 Static 영역입니다. 이 부분은 컴파일 시간에 크기가 결정됩니다.

 

두꺼운 선을 기준으로

아래의 Heap, StackDynamic영역으로 실행시간에 따라 크기가 결정됩니다



스택과 힙 이 둘은 할당받은 일정 메모리 공간 내에서, 빈 공간을 사이에 두고

힙은 낮은 곳에서 높은 메모리 주소로, 스택은 높은 곳에서 낮은 메모리 주소로 크기를 키우며 메모리 공간을 차지합니다.

 

그러다 스택, 힙에 할당된 영역 보다 더 큰 메모리가 필요해지면 오버플로우가 발생합니다.

힙이 커져서 문제가 생기면 힙 오버플로우, 스택이 커져서 문제가 생기면 스택 오버플로우 라고 합니다. 2개는 나중에 더 자세히 설명하겠습니다.

 

스택 또한 나중에 더 자세히 설명하겠습니다.




'관련지식들' 카테고리의 다른 글

스택이란? (Stack)  (0) 2018.10.01
어셈블리어와 레지스터  (0) 2018.08.26