Computer

메모리 구조

NONE_31D 2019. 9. 24. 00:08

프로그램이 실행되기 전에 먼저 메모리에 로드되어야 한다. 그리고 프로그램 내에서 사용할 많은 변수들을 저장할 공간도 필요하다. 운영체제는 프로그램을 실행하기 위해 많은 메모리 공간을 제공하는데, 대표적으로 다음과 같다.

 

코드 영역 실행할 프로그램의 코드
데이터 영역

전역 변수

정적 변수

힙 영역

사용자의

동적 할당

스택 영역

지역변수

매개변수

 

코드 영역에 가까울 수록 낮은 주소이고, 스택 영역에 가까울수록 높은 주소를 갖게 된다.

힙 영역과 스택 영역은 고정되어있지 않는데, 스택 영역은 컴파일 타임에 따라, 힙 영역은 런 타임에 따라 크기가 결정된다. 같은 영역을 공유하게 되는 만큼 어느 한쪽이 과도하게 메모리를 많이 쓰게 된다면 각각 스택 오버플로우, 힙 오버플로우가 발생하게 된다.

 

코드 영역

- 프로그램의 코드가 저장되는 영역

- 텍스트 영역이라고도 불림

 

데이터 영역

- 프로그램의 전역변수, static 변수가 저장되는 영역.

- 프로그램 시작시 메모리 할당 진행, 프로그램 종료 시 메모리 해제가 진행된다.

 

스택 영역

- 함수 호출 시 발생하는 지역변수 및 매개변수가 저장되는 영역.

- 함수가 호출될 경우, 스택에는 매개변수, 반환 주소값, 지역변수 순으로 push 됩니다.

- 함수가 종료될 시, pop을 통해 해당 함수에서 사용한 지역변수를 내보내고, 이어 pop 한 반환 주소를 통해 돌아갈 주소를 지정한 후, 매개변수도 pop을 통해 스택에서 지우게 됩니다.

 

- 스택 오버플로우 : 함수의 재귀 호출이 반복되어 스택의 저장 공간을 넘칠 시 발생. 힙 영역까지 침범할 수 있기 때문에 일반적인 프로그램에서는 오버플로우 발생시 에러 출력과 함께 프로그램 강제 종료가 진행된다.

 

 

힙 영역

- 사용자가 직접 관리하는 메모리 영역

- 동적 할당을 이용할 경우, 힙 영역을 사용하게 됨.

 

 

 

 

'Computer' 카테고리의 다른 글

운영체제 12주차  (0) 2019.11.22
[asm] INT 21H  (0) 2019.10.01
GDB 실습하면서 정리하는 명령어  (0) 2019.09.25
Register - 간단 개념 정리  (0) 2019.09.23
함수 프롤로그/에필로그  (0) 2019.09.19