프로그램이 실행되기 전에 먼저 메모리에 로드되어야 한다. 그리고 프로그램 내에서 사용할 많은 변수들을 저장할 공간도 필요하다. 운영체제는 프로그램을 실행하기 위해 많은 메모리 공간을 제공하는데, 대표적으로 다음과 같다.
코드 영역 | 실행할 프로그램의 코드 |
데이터 영역 |
전역 변수 정적 변수 |
힙 영역 |
사용자의 동적 할당 |
스택 영역 |
지역변수 매개변수 |
코드 영역에 가까울 수록 낮은 주소이고, 스택 영역에 가까울수록 높은 주소를 갖게 된다.
힙 영역과 스택 영역은 고정되어있지 않는데, 스택 영역은 컴파일 타임에 따라, 힙 영역은 런 타임에 따라 크기가 결정된다. 같은 영역을 공유하게 되는 만큼 어느 한쪽이 과도하게 메모리를 많이 쓰게 된다면 각각 스택 오버플로우, 힙 오버플로우가 발생하게 된다.
코드 영역
- 프로그램의 코드가 저장되는 영역
- 텍스트 영역이라고도 불림
데이터 영역
- 프로그램의 전역변수, 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 |