본문 바로가기

DEV life/DEV.mobile

KTF clet 어플 구현시 메모리 컴팩션 방지

wipi 규약상, wipi-c (clet)는 메모리 컴팩션을 하도록 되어 있습니다. 따라서 포인터를 직접 사용할 수 없고-컴팩션이 일어날때 마다 메모리 내용이 싹 바뀌니까요-동적으로 할당한 메모리 블럭에 각각 memID를 부여해 그것을 통하여 간접 참조를 하도록 하고 있습니다. 따라서 기존의 c/c++ 개발방식 그대로 만들 수 없다는 문제가 뒤따릅니다. 이는 코드의 이식성과 유연성에 매우 치명적인 결함이며, 솔까말 다 const array로 박아버리고 싶을만큼 할당할 때 마다 귀찮아 죽겠습니다.

 

(그런데 여기서 재미있는 것은 SKT clet은 메모리 컴팩션이 일어나지 않습니다. wipi 규약을 제대로 지켜지 않았지만 그것이 오히려 개발 사이드에서는 장점이군요.)

 

인터넷 검색을 해보면 많은 wipi 개발자들이 이러한 메모리 컴팩션을 일어나지 않게 하는 방법에 대해 여기저기 묻고 다닌 흔적을 쉽게 볼 수 있습니다. 저 역시 그 중 하나였구요.

 

오늘 motive q&a에서 발췌한 하나의 아티클.

 

 

KTF WIPI 1.2 API 에서는 다음의 메모리 관리 API 가 추가되었습니다.
API 문서 4.3메모리 관리 API 를 확인 하세요.
기존 WIPI C 의 메모리 동적 할당 /해제 API 는 Garbage Collection 이나 Memeory
Compaction 에 의해 절대위치가 변경될 수 있으므로, 새롭게 메모리 절대 번지에 접근할수 있도록 하는 API 를 제공하여 기 구현된 C 솔루션들의 WIPI 플랫폼으로의 포팅을 용이하도록 한다.
typedef struct _MC_UserMemInterface
{
    M_Int32 (*memInit)(void* heapBase, M_Int32 size);
    void* (*memAlloc)(void* heapBase, M_Int32 size);
    void* (*memCalloc)(void* heapBase, M_Int32 numMember, M_Int32 size);
    void (*memFree)(void* heapBase, void* memPtr);
}
MC_UserMemInterface;
<사용법>
WIPIHeader.h 파일 MXUserMemMgr.h 을 주석을 풀어준다. 
#include "MXUserMemMgr.h"
//#include "sys/MXUserMemMgr.h"

 

 

'DEV life > DEV.mobile' 카테고리의 다른 글

Three20  (0) 2009.09.24
SKT의 앱스토어, T-STORE 오픈. 그러나..  (0) 2009.09.09
날로 먹는 iPhone dev 일기 #5  (0) 2009.08.01
날로 먹는 iPhone dev 일기 #4  (0) 2009.06.19
SKT 앱스토어 오픈  (0) 2009.06.09