메모리 구조
- 코드(Code) - 실행할 프로그램의 코드
- 데이터(Data) - 전역변수, 정적변수
- 스택(Stack) - 지역변수, 매개변수
- 힙(Heap) - 사용자의 동적 할당
코드(Code) 영역
- 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부릅니다.
- CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.
데이터(Data) 영역
- 프로그램의 전역변수와 정적변수가 저장되는 영역입니다.
- 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.
- 전역변수(global variable) : 블록 외부에 선언되는 변수로 어느지역에서는 참조해서 사용할 수 있다. 프로그램이 종료되면 메모리에서 사라지는 장점이 있지만, 유지보수등의 관리가 어려워질 수 있다.
- 정적변수(static variable) : 전역변수와 비슷한 변수이며 차이점은 초기화가 딱 한번만 진행되는 변수이다. 또한 함수의 매개변수로 사용할 수 없는 변수이다.
스택(Stack) 영역
- 함수의 호출과 관계되는 지역변수와 매개변수가 저장되는 영역
- 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸 => 정보 : 스택 프레임(Stack Frame)
- 지역변수(local variable) : 지역변수란 '블록'내에서 선언된 변수를 의미하며, 변수가 선언된 블록 내에서만 유효하고, 블록이 종료되면 메모리에서 사라집니다.
- 매개변수(Parameter) : 함수 등에서 사용되는 전달된 값을 받는 변수입니다.
- 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다
- 이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.
- 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.
힙(Heap) 영역
- 사용자가 직접 관리할 수 있는 메모리 영역입니다.
- 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.
- 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.