Unity힙(Heap) 메모리와 메모리 관리

김보근·2024년 10월 7일
0

Unity

목록 보기
91/113

오늘은 유니티에서 사용되는 힙(Heap) 메모리 구조에 대해 배웠다. 힙 메모리는 게임 개발에서 중요한 동적 메모리 할당이 이루어지는 공간이며, 적절히 관리하지 않으면 성능 저하나 메모리 누수와 같은 문제를 발생시킬 수 있다.

힙이란?

힙(Heap)은 동적 메모리 할당이 이루어지는 메모리 공간이다. 프로그램이 실행 중에 크기가 유동적인 데이터를 저장할 때 힙을 사용한다. 유니티에서 new 키워드로 객체를 생성할 때, 그 객체는 힙 메모리에 할당된다.

힙 메모리의 특징

동적 할당: 프로그램이 실행되는 동안 필요에 따라 메모리를 할당하고 해제할 수 있다. 특히 객체, 배열 등 크기가 가변적인 데이터를 저장할 때 사용된다.

크기 가변성: 힙은 스택과 달리 크기가 정해져 있지 않고, 동적으로 필요한 만큼 메모리를 할당할 수 있다. 하지만 그만큼 메모리 관리가 복잡하고, 잘못 관리하면 메모리 누수가 발생할 수 있다.

메모리 해제 필요: 힙에 할당된 메모리는 명시적으로 해제하거나, 유니티의 경우 가비지 컬렉터(GC)가 더 이상 참조되지 않는 객체를 자동으로 해제한다. 하지만 GC는 성능 부담이 크기 때문에 불필요한 메모리 할당을 최소화하는 것이 중요하다.

성능: 힙 메모리는 스택보다 느리다. 힙은 크기가 유동적이기 때문에 메모리 할당 및 해제 시 추가적인 관리 비용이 들고, 이로 인해 성능이 저하될 수 있다.

힙과 스택의 차이

스택(Stack):

함수 호출 시 정적으로 메모리가 할당되고 자동으로 해제됨.
주로 지역 변수와 같은 간단한 데이터가 저장됨.
메모리 접근과 해제가 빠름.

힙(Heap):

실행 중에 동적으로 메모리가 할당되고, 명시적으로 해제해야 함.
크기가 가변적인 데이터나 객체가 저장됨.
메모리 접근 및 해제가 상대적으로 느림.

힙 관리의 중요성

게임 개발에서는 힙 메모리 관리가 성능에 큰 영향을 미친다. 특히 유니티에서 힙 메모리에 대한 과도한 할당과 해제는 가비지 컬렉션을 빈번하게 호출하게 만들어 프레임 드랍을 유발할 수 있다. 이를 방지하기 위해 객체 풀링(Object Pooling)과 같은 기법을 사용하여 메모리 할당을 최적화해야 한다.

느낀 점

힙 메모리는 동적 데이터를 관리하는 데 유용하지만, 잘못 관리하면 성능 문제로 이어질 수 있다. 앞으로는 메모리 관리에 좀 더 신경 써서 불필요한 메모리 할당을 줄이고, 특히 힙 메모리 사용을 최소화할 수 있는 최적화 방법을 적극적으로 적용해야겠다.

참고 자료:
https://docs.unity3d.com/kr/560/Manual/UnderstandingAutomaticMemoryManagement.html

profile
게임개발자꿈나무

0개의 댓글