c 언어를 작성하다 보면 메모리 에서 고민을 많이 합니다.
위피로 개발하다보면 마찬가지로 메모리 쪽에서 문제가 가끔 생기죠.
메모리 할당방식이 좀 다릅니다. 그냥 표준 C 언어를 따르면 좋겠지만 메모리 단편화인지 하는 문제를 줄여보려고 고민하다가 현재의 위피처럼 만들어졌다는 소리가 있습니다. 뭐 잘해보려구 하다가 이리 된건데 욕하기도 뭐하고.. 그래도 좀 표준으로 만들었으면 합니다. 웹도 그렇고..언어마저...모바일이라는 특성 때문에 없는것도 많고 안되는것도 많고..
윗분들은 어디서 보신것들은 많으셔서 아이폰에서 뭐 된다더라... 해봐라.. 하시는데요.. 아직 들어오지도 않은 아이폰에 기대들이 많으신거 같습니다. 요즘 회사에 맥북을 들여와서 좀 보고 있습니다만.. 언어를 새로 배우려니..좀 편법으로 사용할 방법을 연구중입니다..오브젝트C의 사용을 최소화하고 대략 써 보려구 잔머리 쓰는 중인데요 아무래도 하던 넘이 편한거 같습니다. 뭐랄까요..두벌식 쓰다가 세벌식으로 바꾸기 힘든거 바로 그 상황인거죠...사실 화려한 이펙트들이 많아서 디자이너들은 좋아하겠지만 프로그래머들은 좀 불편하지 않나 싶기도 하고.... 잡설이었습니다.
아무튼...위피의 메모리 할당에 대해 설명하려구 합니다.
1. 오리지날 C 언어에서의 메모리 할당 및 해제...
char *tmp_str;
int nLen;
nLen = strlen(test_str);
tmp_str = (char *)malloc(nLen+1);
memset(tmp_str,0,nLen+1);
strcpy(tmp_str,test_str);
// tmp_str 사용
완전 간단한 사용예제입니다.
1. malloc() 로 메모리 할당해서
2. memset()로 초기화 하고
3. strcpy() 로 입력해서
4. 여차저차 사용한뒤에
5. free()로 메모리 해제.
여기까진 완전 오리지날 C에서 사용하는 방식입니다.
2. WIPI C 에서 메모리 할당 및 해제...
char *tmp_str;
int nLen;
M_Int32 hMem; // 추가되는 변수 : 메모리ID 저장용
nLen = strlen(test_str);
hMem = MC_knlCalloc(nLen+1);// 사용할 메모리의 ID 값
tmp_str = (char *)MC_GETDPTR(hMem);//할당한 메모리ID 값으로 메모리address 값을 불러온다.
memset(tmp_str,0,nLen+1);
strcpy(tmp_str,test_str);
// tmp_str 사용
설명을 드리면..
1. MC_knlCalloc()로 메모리ID 값을 할당해서
2. MC_GETDPTR() 로 불러온 메모리ID값을 입력하여 메모리address 값을 불러옵니다.
3. memset()로 초기화 하고
4. strcpy() 로 입력해서
5. 여차저차 사용한뒤에
6. MC_knlFree()로 메모리 해제.
차이점을 보면
M_Int32변수 hMem이 추가되어 메모리ID값을 받고
그걸 이용해 매모리 할당한 값을 받은뒤에
사용하고 지운다..입니다. 좀 복잡한가요?
저도 실수 많이 했습니다. 그래도 몇번 머리털 뽑고 나니 익숙해집니다.
그럼 오늘은 여기까지...
참.
C언어의 malloc()와 calloc() 차이점은 대충 아시죠? 초기화 되느냐 안되느냐..정도인데요.
WIPI 도 MC_knlAlloc(), MC_knlCalloc() 란 함수가 있습니다.