1. 런타임 메모리 (S/W 관점, Runtime 실행 차원에서의 컴퓨터 기억장치 영역)
ㅇ 프로그램의 실행 관점에서, 메모리 상에 일시적으로 데이터를 기억해두는 영역
ㅇ 프로그램의 실행 관점에서, 기억 공간을 어떻게 연결 사용하는가에 대한 관점 둘(2)
- 주소와 변수 간의 관계 : `참조`
. 메모리 내 위치 참조를 위해, `주소`라는 수치화된 값을 이용함
. 수치로된 `주소`를 기억하기 어려워, 그에 이름을 붙인 `변수`를 사용하게 됨
- 변수와 기억장소 할당 간의 관계 : `바인딩`
. 변수에 기억장소로의 할당은, 메모리 공간을 바인딩하는 것을 말함
. 여기서, 바인딩이란, 변수,프로시저,상수 등의 이름(식별자)을 속성(값)과 연관짓는 것
2. 런타임 메모리의 할당 영역 구분
ㅇ 영구 메모리 (Permanent) : 정적인 메모리 (전역 영역)
- 코드 영역 : 프로그램 명령어, 함수 등이 저장되는 영역
- 데이터 영역 : 전역 변수, 정적 변수 등이 저장되는 영역
* 한편,
. 과거, 완전히 정적으로 만 할당되는 대표적인 언어로는 FORTRAN
. 현재, 대부분의 언어는 프로그램 위치에 따라, 정적 할당, 동적 할당이 적절히 이루어짐
ㅇ 스택 메모리 (Stack Memory) : 동적 자동 메모리
- 지역 변수, 매개 변수, 함수 호출 등에 관여되는 자동 변수가 저장되는 영역
. 주로, 블록 내 생성된 지역 변수를 처리하기 위해 사용됨
. 함수가 종료되면 자동으로 할당된 공간이 소멸됨
- 통상, 주소 공간 상에서, 높은 주소에서 낮은 주소 순으로 할당 됨
ㅇ 힙 메모리 (Heap Memory) : 동적 메모리 할당
- 주로, 어플리케이션이 운영체제로부터 미리 할당 받는 메모리 영역
. 그 영역 내, 어플리케이션이 사용 가능한 일정한 메모리 공간
- 즉, 프로그램 실행 중에, 동적으로 할당되는 메모리 영역
- 통상, 주소 공간 상에서, 위쪽으로 확장됨
- 例) C 언어에서 볼 때, malloc(), calloc(), free() 등에 의해 수행됨
ㅇ 자유 영역 (Free Memory) : 동적 메모리 해제 (미 할당 영역)
- 필요에 따라 메모리를 할당할 수 있도록 미리 준비해두는 메모리 풀(memory pool)
. 결국, 힙에 의해 할당되지 않은 자유 영역으로써,
그 크기가 할당과 해제에 의해 자유롭게 변할 수 있음
* 운영체제,컴파일러 등이 자동으로 관리해주는 동적 자동 메모리(스택 영역)와 달리,
프로그래머가 직접 관리 가능한 자유 메모리 영역