컴퓨터와 프로그램 메모리2022. 5. 2. 00:30
프로그램(exe) 메모리
프로그램을 실행하면 운영체제가 프로그램을 위한 메모리 공간을 할당한다.
우리가 하는 일은 모두 이 연속된 메모리 안에서 일어나게 된다.
프로그램의 메모리 공간은 네 개의 영역으로 나눠서 관리된다 ( 위의 이미지 )
1. 코드 영역 : 프로그램에 작성된 코드가 저장된다.
2. 데이터 영역 : 프로그램의 글로벌 데이터들이 저장된다.
3. 힙 영역 ( 위에서부터 아래로 데이터를 쌓아간다. ) :
단, 너무 많은 동적할당을 할 경우.. 힙 데이터가 스택 영역을 침범하게 된다. 이것을 힙 오버플로우라고 한다.
4. 스택 영역 ( 아래에서 부터 위로 데이터를 쌓아간다. ) :
함수 데이터들이 차곡차곡 쌓이는 공간이다. 코드에서 각각의 함수를 호출할 때마다 지역 변수나 매개 변수, *반환 주소 같은 것들이 쌓이게 된다.
단, 호출 스택이 너무 길어지거나.. 지역 변수를 너무 많이 만들게 되면 운영체제가 할당해준 스택 영역 범위를 벗어나게 되고. 결국 힙 영역을 침범하게 된다. 이것을 스택 오버플로우 라고 한다.
* 반환 주소 : 프로그램이 함수를 호출하고 반환하는 과정은 반환 주소를 통해 이루어진다.
그래서 함수들이 호출되는 과정을 Call Stack 이라고 부른다.
cf.
버퍼 오버플로우 : 힙 오버플로우와 스택 오버플로우를 합쳐 부르는 단어
'CS' 카테고리의 다른 글
배열 할당 : 메모리 상태 (0) | 2015.11.06 |
---|---|
메모리의 구조과 프로그램 완성과정 (0) | 2015.06.03 |