프로그램과 프로세스
프로그램
- 컴퓨터를 실행시키기 위해 차례대로 작성된 명령어 모음
프로세스
프로그램이 실행되면 프로세스가 생성되고 메모리에서 해당 프로세스의 address space
가 할당된다.
메모리 구조
코드 영역(텍스트 영역)
- 작성된 소스코드가 들어있는 부분
- 읽기만 가능하다.
- 크롬을 여러 탭 띄우고 있는 것처럼 같은 프로그램을 실행하는 프로세스끼리 공유해 메모리 사용량을 줄인다.
데이터 영역
- 전역변수와 static변수가 할당되는 영역
- 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 소멸된다.
- 읽고 쓰기가 가능하다.
스택 영역
- 프로그램이 자동으로 사용하는 임시 메모리 영역
- 함수 호출 시 지역 변수와 매개 변수가 저장되는 영역
- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당된다.
- 읽고 쓰기가 가능하다.
- 컴파일 타임에 크기가 결정된다.
실제 스택 영역은 변수 단위가 아닌 stack frame
단위로 쌓이게 되고 이 stack frame은 함수 단위
로 나눠진다.이 stack frame은 지역 변수, 전달받은 인자, 함수가 끝나고 실행할 다음 명령어의 주소
를 담고있다.
힙 영역
- 프로그래머가 동적으로 메모리를 할당/해제하는 메모리 공간
- 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.
- 읽고 쓰기가 가능하다.
- 런타임에 크기가 결정된다.
스택과 힙은 같은 공간을 공유하지만, 할당되는 시작 위치가 다르다. 그래서 힙이 스택을 스택이 힙을 침범할 수 있는데 이를 overflow
라 한다.
참고
[컴퓨터 기초] 메모리구조(Memory Structure)
프로세스(Process)의 주소 공간(Address Space)
스택 메모리 라스트
힙 메모리 소개, Heap memory introduction