게임 이론: 메모리와 디스크 (2)

1. 메모리의 확보와 해제
 게임 화면 내의 데이터는 매우 다양합니다. 3D 액션 게임이라면 플레이어, 적, 스테이지, 2D UI, 효과음, 음악 등이 있을 것입니다. 이것을 메모리에 배치해야 하는데, 이때 확보와 해제 작업이 필요합니다.

 확보는 데이터 크기를 지정해 사용을 명시하는 것을 말합니다. 메모리를 확보하면 메모리의 주소를 받습니다. 주소는 처리에 따라 매번 달라지는데, 메모리 내에 비어 있는 적절한 장소의 주소를 받게 됩니다.

 해제는 메모리 내의 데이터를 폐기하는 것을 말합니다. 메모리 내의 데이터가 불필요할 경우에 사용합니다. 해제를 한 메모리는 다시 확보하여 사용할 수 있습니다.

2. 메모리를 확보할 수 없는 요인
 메모리를 확보할 수 없는 경우에는 대부분 게임이 올바르게 작동되지 않습니다. 원래 게임을 만들 때는 각 화면의 데이터 크기를 고려해 메모리에 적재할 수 있도록 설계해야 합니다. 하지만, 그렇지 못하는 경우가 있는데, 주요 요인이 바로 '연속된 영역을 확보할 수 없다'라는 점입니다.

 넣으려는 데이터가 메모리의 배치로 인해서 공간 확보가 되지 않아 넣어지지 못하는 경우를 단편화 혹은 파편화라고 합니다. 이런 단편화가 일어나지 않으려면 남은 메모리의 단순한 합계가 아닌 연속된 영역의 합계를 알아야 합니다.

3. 단편화를 피하기 위한 방법
 단편화를 피하려면 생각보다 더 복잡한 과정을 거쳐야 합니다.

 1) 카테고리마다 영역을 나눈다
  메모리를 커다란 하나의 영역이라고 생각하면 여기에는 그래픽 데이터, 게임 정보, 사운드와 같은 각종 데이터로 뒤섞여 있을 것입니다. 이 데이터를 각각 카테고리마다 미리 나누어 둡니다. 이 상태에서 확보와 해제를 실행하면 다른 카테고리를 불러오기도 쉽고 메모리 관리도 쉽게 할 수 있습니다.

 2) 소용량과 대용량으로 나눈다
  작은 데이터는 작은 데이터 전용 영역에 배치하고 큰 데이터는 큰 데이터 전용 영역에 배치함으로써 단편화를 막을 수도 있습니다.

 3) 일정 기간으로 재배치한다
  단편화가 발생한 상태에서 사용 중인 영역만을 모아 정리함으로써 비어 있는 용량을 확보하는 방법을 컴팩션(가비지 컬렉션)이라고 합니다.이 방법은 배치를 조정할 때마다 데이터의 주소가 바뀐다는 단점이 있습니다.

 지금까지의 방법은 단편화를 최소화시키기 위한 방법입니다. 가장 중요한 것은 프로그래머가 메모리의 상태를 항상 고려하면서 프로그램을 구성해야 한다는 것입니다.

4. 메모리릭
 메모리릭 또는 메모리 누수는 불필요한 데이터를 남겨둔 채로 처리를 진행하는 것을 말합니다. 메모리릭으로 인해서 불필요한 내용이 있는 메모리가 생기게 되고 사용할 수 있는 메모리의 크기는 줄어들게 되면서 충돌이 생기게 됩니다.

 메모리릭은 해제하는 것을 잊는 사소한 실수에 의해서 발생됩니다. 이러한 문제를 피하기 위해서는 일어날 수 있는 상황을 전부 상정하면서 프로그램을 만들어야 합니다.

댓글