porting 작업 중에..
글쓴이: hongwoo / 작성시간: 목, 2005/05/19 - 12:01오후
안녕하세요.,
현재 다른 플랫폼으로 어플리케이션 포팅을 진행중입니다.
A 플랫폼에
struct globalmem { void * (*malloc)(unsigned int size); void * (*calloc)(int count, unsigned int size); void (*free)(void * pt); }; 이런 비슷한게 있습니다. malloc을 사용하려면., 꼭 globalmem gMem; gMem.malloc(8); 이런 식으로 사용해야 합니다.
B 플랫폼에는
malloc등 표준 C 라이브러리 함수들을 사용할 수 있습니다.
그런데 이 표준 함수들이 다들 #define으로 정의되어 있는거 같습니다.
예를 들어..
#define malloc(size) MEM_MALLOC (GLOBAL_MEM_MAGAGER, size) 그래서 B 플랫폼에서.. struct globalmem { void * (*malloc)(unsigned int size); void * (*calloc)(int count, unsigned int size); void (*free)(void * pt); };
이런식으로 재정의 해서 사용하는데 컴파일 타임에서 에로가 있습니다.
제가 설명이 제대로 했는지 모르겠습니다. 이해해주세요.,
제가 하고 싶은건 플랫폼 A 용 코드에 무수히 많은
gMem.malloc(sizeof(BITMAP));
같은 코드를 한방에 고치려고 하는건데요.,
예를 들어
#define gMem.
이렇게 할 수 있다면 (^^) 편할거 같습니다.
이런 경우에 뭔가 대안이나 그런게 혹시 있는지 알려주시면 고맙겠습니다.
Forums:
1,$s/gMem\.malloc/malloc/g
1,$s/gMem\.malloc/malloc/g
변경하지 않아도 될 것 같은데요.
A 플랫폼에서 B 플랫품으로 변경하는데, 왜 그 문구를 변경해야
하는지 모르겠습니다.
struct globalmem 코드에서 malloc 변수와 calloc 변수 그리고 free 변수에
각각 B 플랫품의 malloc함수 주소, calloc 함수 주소 그리고 free 함수 주소를 대입해 주면 되는 것 아닌가요?
B 플랫품의 malloc()이 함수가 아닌 function-like한 매크로 이기 때문인가요?
-- 수정된 글 --
아래 손님의 글로 인해 저도 머리를 글적글적 합니다.
function-like macro라고 표현하는 것 같습니다.
정확한 어원을 아시는 분의 글을 기대합니다.
http://developer.apple.com/documentation/DeveloperTools/gcc-4.0.0/cpp/Macros.html#Macros
Re: 변경하지 않아도 될 것 같은데요.
저도 함수주소를 대입해주면 편할거 같습니다.
function like 한 매크로가 정확한 표현인가요 ?
정확한 표현인지는 모르겠지만., function like한, 복잡한.., 매크로 문제입니다.
malloc의 function prototype이 다르므로 globalm
malloc의 function prototype이 다르므로 globalmem을 각 platform에 맞게 정의해서 사용해야 할 듯 합니다.
----------------------------------------
http://moim.at
http://mkhq.co.kr
댓글 달기