Game !

코드와 데이터는 정적 영역이며, 사용할 데이터들이 컴파일 시점에 이미 결정이 되어 있다. 힙과 스택은 유동적으로 결정된다.

 


프로그램(exe) 메모리

프로그램을 실행하면 운영체제가 프로그램을 위한 메모리 공간을 할당한다.

우리가 하는 일은 모두 이 연속된 메모리 안에서 일어나게 된다.


프로그램의 메모리 공간은 네 개의 영역으로 나눠서 관리된다 ( 위의 이미지 )

1. 코드 영역 : 프로그램에 작성된 코드가 저장된다.

2. 데이터 영역 : 프로그램의 글로벌 데이터들이 저장된다.

3. 힙 영역 ( 위에서부터 아래로 데이터를 쌓아간다. ) :
단, 너무 많은 동적할당을 할 경우.. 힙 데이터가 스택 영역을 침범하게 된다. 이것을 힙 오버플로우라고 한다.

4. 스택 영역 ( 아래에서 부터 위로 데이터를 쌓아간다. ) :
함수 데이터들이 차곡차곡 쌓이는 공간이다. 코드에서 각각의 함수를 호출할 때마다 지역 변수나 매개 변수, *반환 주소 같은 것들이 쌓이게 된다.
단, 호출 스택이 너무 길어지거나.. 지역 변수를 너무 많이 만들게 되면 운영체제가 할당해준 스택 영역 범위를 벗어나게 되고. 결국 힙 영역을 침범하게 된다. 이것을 스택 오버플로우 라고 한다.


* 반환 주소 : 프로그램이 함수를 호출하고 반환하는 과정은 반환 주소를 통해 이루어진다.
그래서 함수들이 호출되는 과정을 Call Stack 이라고 부른다.


cf.
버퍼 오버플로우 : 힙 오버플로우와 스택 오버플로우를 합쳐 부르는 단어

 

'Computer' 카테고리의 다른 글

컴퓨터에서의 2의 보수  (0) 2022.05.01