프로그램이 실행되기 위해서는 프로그램이 메모리에 load 되어야 합니다.
운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공해줍니다.
이때, 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간으로는
Code
영역Data
영역Heap
영역Stack
영역이 존재합니다
Code 영역
은 실행할 프로그램의 코드가 저장되는 영역입니다.
실제 작업을 수행하는 CPU 가 Code 영역에 저장된 명령어를 가져다가 하나씩 처리하게 됩니다.
즉, 코드 영역은 컴퓨터가 이해할 수 있는 기계어로 번역된 소스코드
이고 컴파일 시 에 정해진 메모리 공간
을 할당 받습니다.
Data 영역
은전역 변수
와 정적 변수
가 저장되는 영역입니다.
컴파일시에 메모리에 할당 되며 프로세스가 실행되고, 작업을 마칠 때 까지 메모리에 계속 남아있게 됩니다.
Stack 영역
은 함수의 호출과 관계되는 지역 변수
와 매개 변수
가 저장되는 영역입니다.
스택 영역은 LIFO 방식
에 따라 동작하고, 메모리의 높은 주소
에서 낮은 주소
의 방향으로 할당합니다.
컴파일 시점
에 할당 받을 메모리 크기가 결정됩니다.
Heap 영역
은 사용자가 직접 관리해야하는 영역입니다.
사용자에 의해 메모리 공간이 동적 으로 할당
되고 해제
됩니다.
메모리의 낮은 주소
에서 높은 주소
방향으로 할당되고, 런타임 시점
에 크기가 결정됩니다.
Stack 영역
이 Heap 영역
을 침범하는 경우에 발생됩니다.
언제 Heap 영역을 침범하나?
Stack 영역
의 데이터들이 컴파일 시점에 할당받은 메모리 크기보다 더 커지게 되면 바로 위에 존재하는Heap 영역
을 침범 하게 됩니다.
Heap 영역
이 Stack 영역
을 침범하는 경우에 발생됩니다.
언제 Stack 영역을 침범하나?
Stack OverFlow
와는 반대로 Heap에 할당된 데이터들이 점점 많아져 자신에게 할당받은 영역을 넘게되어 바로 아래에 존재하는Stack영역
을 침범 하여 발생하게 됩니다.