TIL (Today I Learned)
메모리의 개념
- 컴퓨터 구조 중 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다.
- 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 하며 프로그램에서 사용되는 변수들을 저장할 메모리도 필요하다.
- 이때 컴퓨터가 빠르게 작동하기 위해서는 메모리 속에 저장된 명령어와 데이터 위치가 정돈되어 있어야 하며, 이때 메모리에 저장된 값을 빠르고 효율적으로 접근하기위해
주소 개념을 사용한다.
할당되는 메모리 공간의 종류

코드 영역
- 실행할 프로그램의 코드가 저장되는 영역으로
텍스트(code) 영역이라고도 부르며 CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.
데이터 영역
- 전역 변수와 정적(static) 변수가 저장되는 영역으로 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.
힙 영역
- 동적 메모리 할당에 사용되며, 프로그램 실행 중에 메모리 크기가 결정된다.
- 힙 메모리는 스택 메모리보다 느리지만, 더 큰 메모리 공간을 제공한다.
- 힙에 할당된 메모리는 개발자가 직접 관리해야 하며, 사용이 끝난 메모리는 명시적으로 해제해야 한다.
- Unity 나 C#에서는
new키워드나 GameObject, MonoBehaviour를 생성할 때, 힙 메모리를 사용하며, 가비지 컬렉터를 통해 메모리를 회수 할 수 있지만, 메모리 누수를 방지하기 위해 사용이 끝난 객체에 대한 참조를 명시적으로 null로 설정하는 것이 좋다.
스택 영역
- 정적 메모리 할당에 사용되며, 컴파일 시간에 따라 크기가 결정된다.
LIFO(Last In First Out) 원리로 작동하며 여기서, **LIFO**는 가장 마지막에 들어온 데이터가 가장 먼저 나가는 구조를 의미한다.
- 함수 호출과 함께 로컬 변수가 저장되는 곳으로, 함수가 종료되면 할당된 메모리가 자동으로 해제된다.
- 데이터에 접근하는 방식이 단순하고, 메모리가 자동으로 관리되기 때문에 속도가 매우 빠르다는 장점이 있다. 하지만, 스택의 크기는 제한적이며, 이를 초과하면 스택 오버플로우 오류가 발생할 수 있다.
- 따라서 스택을 사용할 경우 메모리의 한계를 고려하여, 필요 이상의 메모리 할당을 피해야 한다.
- 스택의 사용예시로는, 재귀함수의 호출이 있으며, 각 호출마다의 매개변수와 지역 변수가 스택에 저장된다.
스택 메모리와 힙 메모리의 차이점