자료구조의 Stack과 Heap외에 메모리 영역을 구분할 때에 Stack영역과 Heap영역이 존재한다.
메모리는 아래와 같이 크게 4가지 영역으로 구분된다.
1. Code 영역
프로그램 명령이 위치하는 곳으로, 기계어로 제어되는 메모리 영역이다.
2. Data 영역
전역 변수, 정적 변수(static) 등이 저장된다. Data영역은 다시 Initialized data 가 저장되는 data segment와 Uninitialized data가 저장되는 bss segment로 나눠진다.
3. Heap 영역
동적 메모리 할당을 할 경우 Heap 영역에 할당된다. Runtime시에 영역의 크기가 할당되며, Uninitialized segment의 top부터 Stack영역의 bottom 부분에 위치한다. malloc(), C++에서는 new()등이 여기에 해당된다. 메모리 생성/제거의 순서는 없으며 메모리 주소값에 의해서만 참조되어 사용된다. Heap 영역을 넘어서서 Stack 영역으로 침범하는 것을 Heap overflow라고 한다.
4. Stack 영역
자동으로 생성되는 변수들이 저장되는 곳으로, 프로그램이 자동으로 사용하는 임시 메모리 영역이다. 함수가 호출될 때 함수 내부의 지역변수, parameter, return 값 등이 저장되는 영역이다. 함수가 실행되는 동안에만 존재하며, 함수의 실행이 끝나면 Stack 영역에서 지우고 system에 반환된다. Compile시에 영역의 크기가 할당되며, 프로그램의 높은 메모리 주소부터 사용한다. 함수를 호출할 때 해당 함수가 종료되고 다시 돌아오기 위해서 현재 상태를 저장하고 호출한 함수의 정보를 저장했다가, 함수가 종료되면 함수의 정보를 제거하고 저장해두었던 상태 정보를 불러오는 LIFO 방식으로 동작한다. 할당한 Stack영역을 넘어서서 Heap 영역으로 침범하는 것을 stack overflow라고 한다.
'개발' 카테고리의 다른 글
Visual Studio 2015 주요 단축키 (0) | 2016.12.28 |
---|---|
Window에서 심볼릭링크 만들기 및 커맨드창 관리자권한으로 열기 (0) | 2013.08.19 |
Highlighter 티스토리에 적용하기 (0) | 2013.02.13 |
Windows7 에서 VPN 연결하기 (0) | 2012.10.28 |
윈도우7에서 FTP서버 구축하고 xe에서 FTP 설정하기 (2) | 2012.09.07 |
논문실적 자료 정리 (0) | 2012.07.10 |