프로그램이 실행되는 과정
1. 사용자가 실행을 요청
2. 운영체제는 프로그램의 정보를 읽어 메모리에 공간 할당
3. CPU는 프로그램의 코드 실행
메모리 구조
Text (코드영역)
코드를 실행하기 위한 정보들이 저장되는 영역으로 CPU는 이 영역에 저장된 명령어를 가져다 실행한다
제어문, 함수, 상수 등이 저장됨
Data
코드에서 선언한 전역변수, 정적 변수 등이 저장되는 공간
프로그램의 시작과 함께 할당되며, 프로그램 종료 시 소멸한다
초기화 된 변수 영역, 초기화 되지 않은 변수 영역으로 나뉜다
Heap
사용자에 의해 관리되는 동적 할당 영역
클래스 인스턴스, 클로저 같은 참조 타입이 저장된다
Java에서는 gc에 의해 자동으로 해제된다
낮은 주소에서 높은 주소 방향으로 메모리가 할당된다
Stack
함수 호출과 관계되는 지역변수, 매개변수 등이 저장되는 공간
함수 호출 시 할당 되며, 함수 호출 완료 시 할당된 변수들을 메모리에서 해제한다
높은 주소에서 낮은 주소 방향으로 메모리가 할당된다
Heap 과 Stack 은 같은 공간을 공유하는데 서로의 영역을 침범하게 되면 Overflow가 발생한다
참고
http://www.tcpschool.com/c/c_memory_structure