본문 바로가기

ETC

메모리의 구조

메모리의 구조 :

- 프로그램의 실행은 먼저 메모리에 로드 되는 것에서부터 시작됩니다. 또한 프로그램이 사용할 변수들을 저장할 메모리도 필요합니다. 따라서 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있으며 이를 코드 영역, 데이터 영역, 스택 영역, 힙 영역이라 합니다. 

- 코드 영역 : 프로그램을 실행할 텍스트 코드가 저장되어 있습니다. CPU는 코드 영역의 명령어를 하나씩 가져와 처리합니다.

- 데이터 영역 : 프로그램의 전역 변수와 정적 변수가 저장됩니다. 프로그램이 시작 될 때 함께 할당되고 종료될 때 소멸합니다.

- 스택 영역 : 함수의 호출과 관련된 지역변수, 매개변수, 반환 주소값이 저장됩니다. 함수의 호출과 함께 할당되고 함수가 완료될 때 소멸합니다. 이러한 함수의 호출 정보를 스택 프레임이라고 합니다. 스택 영역은 메모리의 높은 주소에서 낮은 주소 방향으로 할당됩니다.

- 힙 영역 : 프로그래머가 직접 관리하는 메모리 영역입니다. 동적으로 할당되고 해제됩니다. 메모리의 낮은 주소에서 높은 주소 방향으로 할당됩니다. 

 

 

스택 프레임이란 :

- 메모리의 스택 영역은 함수의 호출과 관련된 지역변수, 매개변수, 반환 주소값이 저장되는 영역입니다. 스택 영역의 생명주기는 함수의 호출과 함께 합니다. 

- 이러한 함수의 호출 정보를 스택 프레임이라고 합니다. 

- 스택 영역은 LIFO 방식으로 진행되기 때문에 가장 나중에 저장된 데이터가 가장 먼저 인출되는 방식으로 동작합니다. 

 

 

메모리 동적 할당:

- 데이터 영역과 스택 영역에 할당되는 메모리의 크기는 컴파일 타임에 결정됩니다.

- 힙 영역의 크기는 런 타임에 사용자가 직접 결정합니다. 이렇듯 런 타임에 메모리를 할당 받는 것을 동적 메모리 할당이라고 합니다.

- malloc 함수는 프로그램 실행 중 직접 호출하여 힙 영역에 메모리를 할당합니다. 

- 만약 동적 메모리가 부족해지는 현상을 메모리 누수라고 합니다.