엔진의 메모리 관리 구조

ounols·2022년 5월 14일
1

CSEngine 프로젝트

목록 보기
14/17

제목은 거창하지만 사실 별 내용은 없습니다...ㅎㅎ

GC나 그런게 아닌 그냥 메모리 상에 올라가있는 오브젝트나 리소스들을
어떻게 나눠서 로드 및 해제를 진행할지에 대한 고민을 작성한 내용입니다.

나중에 까먹을까봐 미리 글로 작성함니다

엔진의 오브젝트 종류

  • SObject : 모든 오브젝트들의 최상위에 속하는 인터페이스. 얘를 상속 받으면 MemoryMgr에서 해당 오브젝트를 등록함
  • 리소스 : 순수한 정보가 들어가 있는 오브젝트. 외부로부터 데이터를 들여서 저장함. 예시로 Texture, Skeleton...
  • 버추얼 리소스 : 딱히 순수한 정보는 없고 리소스 친구들을 종합한 오브젝트, 얘도 따지면 리소스랑 같지만 메모리 관리 시 버추얼 리소스로 분류됨. 예시로 Prefab
  • 게임 오브젝트, 컴포넌트 : 리소스랑 따로 떨어져있는 오브젝트. 얘는 유동적으로 생성, 삭제를 반복하는 친구

엔진에서 메모리 해제 시 순서

메모리는 최대한 종속성을 따져가면 지워야 이미 해제 된 포인터를 가리키면서 에러를 뿜어내는 현상을 막을 수 있다.

  1. 게임 오브젝트 (오브젝트 삭제되면서 포함된 컴포넌트도 같이 삭제함)
  2. 버추얼 리소스
  3. 리소스

뭐 구현하다가 나중에 단계를 더 나눈다거나 애매한 일이 생기면 수정될 예정

profile
(게임 엔진 프로그래머가 되고싶은) 게임 클라이언트 프로그래머

0개의 댓글