메모리 영역

ChoRong0824·2023년 4월 25일
4
post-thumbnail

컴퓨터의 대표적인 메모리 영역

컴퓨터 메모리는 보통 4가지 영역으로 나누어져 있습니다.

코드(Code) 영역

  • 명령어/ 코드 저장공간.

프로그램 코드가 저장되는 공간입니다. 실행 파일이 메모리에 로드될 때, 코드 영역에 저장되어 CPU가 실행할 수 있도록 됩니다.

데이터(Data) 영역

전역 변수, 정적(static) 변수 등이 저장되는 공간입니다. 프로그램 실행 중 값이 변할 수 있는 전역 변수는 초기화되지 않은 데이터 영역에, 프로그램 실행 중 값이 변하지 않는 전역 변수와 정적 변수는 초기화된 데이터 영역에 저장됩니다.

스택(Stack) 영역

스택(Stack) 영역은 함수 호출 시 생성되는 지역 변수와 매개변수(parameter) 등이 저장되는 공간입니다. 함수가 호출되면, 해당 함수의 지역 변수와 매개변수는 스택에 메모리 공간을 할당받습니다. 이 때, 메모리는 "Last-In-First-Out" 방식으로 할당됩니다.

다시말해, 마지막에 할당된 메모리가 먼저 해제되고, 가장 먼저 할당된 메모리는 가장 나중에 해제됩니다. 이러한 이유로 스택은 "후입선출(LIFO, Last-In-First-Out)" 구조를 가지고 있다고도 표현합니다. 또한, 데이터를 쌓고(push) 뺄(pop) 수 있습니다.

함수가 종료되면 해당 함수에서 사용한 지역 변수와 매개변수는 자동으로 소멸됩니다. 이때, 해당 변수들이 사용하던 메모리 공간은 자동으로 해제됩니다. 스택 영역은 이처럼 메모리 할당과 해제가 빠르게 처리되는 장점이 있습니다. 그러나 스택 영역은 한정된 크기를 가지고 있기 때문에, 지역 변수나 매개변수의 크기가 너무 크면 스택 오버플로우(Stack Overflow) 오류가 발생할 수 있습니다.

즉,
지역 변수와 매개변수(parameter) 등이 저장되는 공간입니다. 함수 호출 시 생성되며, 함수가 종료되면 자동으로 소멸됩니다.

                 Higher Memory Addresses
                        |    
                        |    
                 +------+------+
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 +------+------+
Stack Pointer -> |             |
                 +------+------+
                 |     ...     |
                 +------+------+
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 +------+------+
                 Lower Memory Addresses

위의 그림에서, 스택은 메모리의 높은 주소에서 낮은 주소로 내려가는 방향으로 증가합니다.
스택 포인터(Stack Pointer)는 현재 스택의 맨 위에 있는 데이터의 주소를 가리키는 포인터입니다.
스택 영역의 크기는 시스템마다 다르지만, 일반적으로 스택 포인터가 메모리의 끝에서부터 역방향으로 증가하며, 스택 포인터가 스택 영역의 시작 부분에 도달하면 스택이 가득 찬 것으로 간주됩니다.

힙(Heap) 영역

힙 영역은 컴퓨터 메모리에서 프로그램이 실행될 때 동적으로 할당되는 메모리 공간입니다. 이 영역은 일반적으로 프로그램에서 사용하는 변수나 객체와 같은 데이터가 저장되는 곳이며, 프로그램이 실행되는 동안 계속해서 데이터가 추가되고 제거됩니다.
다시말해, 프로그램이 동작하는 동안 필요한 메모리를 동적으로 할당하고 해제하는 공간으로 이해할 수 있습니다. 이런 힙 영역은 우리가 일상에서 사용하는 컴퓨터나 모바일 앱 등 프로그램이 동작하는 곳에서 중요한 역할을 합니다.

즉,
동적 할당된 메모리가 저장되는 공간입니다. 프로그램이 실행 중에 동적으로 할당되고 해제됩니다.

                 Higher Memory Addresses
                        |    
                        |    
                 +------+------+
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 +------+------+
Heap Pointer ->  |             |
                 +------+------+
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 +------+------+
                 |     ...     |
                 +------+------+
                 |             |
                 |             |
                 |             |
                 |             |
                 |             |
                 +------+------+
                 Lower Memory Addresses

위의 그림에서, 힙은 메모리의 낮은 주소에서 높은 주소로 증가합니다.
힙 포인터(Heap Pointer)는 현재 힙 영역에서 사용 가능한 메모리의 시작 부분을 가리키는 포인터입니다.
동적으로 할당된 메모리는 힙 포인터가 가리키는 위치에서부터 할당됩니다.
또한, 힙 영역의 크기는 OS 및 시스템의 제한에 따라 다릅니다.

profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글