개발할 당시 게임파크 개발자 사이트에 올렸던 내용입니다. 사실은 pc에서도 당연히 하고 있고, 해야 될 것들이지만... (게임기 플렛폼은 치명적일 수 있어서 더욱(?) 조심해야 합니다.)

간단히 저희가 사용한 간단한 꽁수들을 몇 가지 적어보겠습니다. (물론 기본적으로 이 정도도 안 해 주는 곳은 없겠지만, 아직 처리가 안 된게 있다면, 바쁜 일정이라도 하루 이틀 정도만 작업해주시면 좋은 결과를 얻으실 수도...)

1. leak 없애기

문제가 생길 소지를 없애기 위해서 몇 가지 체크 루틴을 넣었습니다.
할당할 때마다 할당한 파일과 라인위치 기억해 두는 식으로 게임 종료 시 해제했나 체크해서 반드시 leak이 안 생기도록 항상 체크 했습니다. (leak 이 큰 문제가 아닐 수도 있지만 한곳에서라도 지속적으로 메모리를 낭비해버리면 나중에 잘못될 위험이 있어서..)

2. 메모리 침범

메모리 할당할 때 필요한 것보다 조금 더 잡아서, 메모리 뒤에 더미 내용을 넣어놓고, free 할 때 그 더미 내용이 변형되었나 검사했습니다. (오브젝트 이름을 16자로 제한해 놓았는데, 18자로 정해서 깨진다거나 해서 잠재적인 문제가 발생하는...)

3. 할당 가능한 메모리 많이 확보하기

극 간단 셈플의 경우 약 6.8메가도 잡히는 데, 저희 쪽의 경우 최근까지도 게임이 시작할 때 할당 가능한 용량을 체크해도 4.6메가 이상은 잘 안 잡는 것이었습니다. 세팅을 여러 가지로 바꿔봐도 크게 바뀌지 않더군요. 그래서 링크할 때 map 파일 생성하게 해서 모든 실행 코드들에 할당된 변수나 배열 크기 등을 일일이 체크해서 조금씩 늘려 나가고 있습니다.
Linker Configuration에 Listing 텝바에 보면 area map 생성하게 할 수 있는 데, 그냥 이 놈만 뽑아서 살펴봐도 쉽게 찾을 수 있습니다. 저희 쪽은 정보들을 넉넉학 배열로 잡아둔 것이 1메가 넘는 것들을 포함해서 줄일 수 있는 것들이 꽤 있더군요. 현재 하나하나 체크 해가면서 줄이고 있습니다.

추가 : 게임 출시할 때는 게임 프로그래머분들 달달 볶아서 6288k까지 확보했습니다. T_T (하도 괴롭혀서 그냥 구경하러 갈 때도 불안해 하셨던...)

추가 : 메모리 사용시 동적인 부분과 정적인 부분을 적당히 조합해서 사용해야 할거 같습니다

4. 메모리 단편화

가능한 malloc 회수를 줄이는 식으로 작업을 했습니다. "필요한 양만큼 한번에" 잡도록 했습니다. 그리고 프로그램 시작할 때 할당하고 해지할 때 free하는 것은 아예 그냥 동적할당을 안 하도록 했습니다. (괜히 중간에 딱 자리 잡고 있으면 메모리 잡는 데 불편하므로...)
이걸 컨트롤하기가 힘들어서 아예 저희 쪽에서는 한번에 몽땅 잡고, malloc, free 를 내부적으로 하게 만들었습니다. 그리고 할당된 영역을 화면에 표시하게 해서 (조각모음처럼...) 실시간으로 메모리 사용량 체크 해 가면서 불필요하게 많은 메모리가 사용되는 경우나 상황들을 체크하고 있습니다.

추가 : 메모리를 할당할 수 있는 만큼 몽땅 할당해버리면 내부적으로 내부 함수들이 먹통이 되는 경우가 있으니 약간의 여유를 두어야 합니다. (잘못하면 파일 오픈도 안되고, 파렛 세팅도 안되더군요. T_T;;..)

5. 기타

같은 자원이 메모리에 중복되어 읽어지는 일은 없는 지 체크합니다

댓글을 달아 주세요

  1. vida guerra dvd 2007/10/18 04:48  댓글주소  수정/삭제  댓글쓰기

    너는 아주 좋은 보는 위치가 있는다!