둘의 차이는 매우 명확하다. 프로그램은 보조 기억장치(하드디스크, SSD)에 존재하며 실행되기를 기다리는 명령어와 정적인 데이터의 묶음으로 그 자체로는 생명이 없다. 이 프로그램의 명령어와 정적 데이터가 메모리에 적재되면 생명이 있는 프로세스가 된다. 그래서 프로세스는 실행 중인 프로그램이라고 하는 것이다.
2. 메모리 영역
메모리 영역을 그림으로 표현하면 위와 같으며, stack 영역으로 갈수록 상위 주소이다.
구분
설명
Text 영역
프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역
Data 영역
전역/정적변수, 배열, 구조체 등이 위치하는 곳으로 초기화 된 데이터는 data 영역, 초기화 되지 않은 데이터는 BSS 영역에 저장된다.
Heap 영역
동적 메모리 할당을 위한 영역 (malloc(), new() 사용)
Stack 영역
지역/매개변수, 리턴 값 등이 잠시 사용되었다가 사라지는 데이터를 저장하는 영역
각 영역에 대한 설명은 위 표와 같다.
메모리 영역을 공부하면서 필자가 궁금했던 것 3가지를 밑에 정리하였다.
1) data영역과 bss 영역을 구분하는 이유는 무엇인가?
초기화되지 않은 변수는 프로그램이 실행될 때 영역만 잡아주면 되고 그 값을 프로그램에 저장하고 있을 필요는 없으나 초기화가 되는 변수는 그 값도 프로그램에 저장하고 있어야 하기 때문이다. 따라서 bss 영역 변수들이 많아져도 프로그램의 실행코드 사이즈를 늘리지 않는다.