2013-10-25 2 views
0

내 프로젝트에 다음 래퍼 함수를 ​​사용하고 있습니다. 나는 그것을 많은 장소에서 사용할 것이다. 이 함수를 계속 사용하거나 대신 매크로 나 인라인 함수를 사용하여 많은 곳에서 사용하려고합니다. 어떤 사람이 작은 임베디드 장치에서이 코드를 사용할 것이므로 최선을 제안 할 수 있습니까? 나는 다른 플랫폼에서 이식 가능한 코드를 유지하기 위해 여기서 래퍼를 사용하고있다. ptrNULL 경우프로젝트에 대한 메모리 할당 및 무료 래퍼

void mem_deallocate(void **mem) 
{ 
    assert(mem != NULL); 

    if (*mem) 
    { 
     free(*mem); 
     *mem = NULL; 
    } 
} 


void *mem_allocate(size_t count, size_t size) 
{ 
    void *mem = malloc(count * size); 
    return mem; 
} 

답변

1

free(ptr)는 아무것도 할 것이다, 그래서 당신은 이런 일에 mem_deallocate() 기능을 제거 할 수 :

void mem_deallocate(void **mem) 
{ 
    assert(mem != NULL); 

    free(*mem); 
    *mem = NULL; 
} 

이 당신에게 if 때문에가는 모든 분기를 절약 할 수 ; 함수 내용을 아주 작게 만듭니다. 내용을 인라인으로 넣는 대신 함수로 가져 오는 오버 헤드는 음울하게 테스트하는 것이 가장 좋습니다.

또한 mem_allocate()malloc 이후 NULLmem에서 확인하지 않으시겠습니까? 현재의 형식에서 나는 함수를 호출하지 않고 그냥 당신이 코드에서

void *mem = malloc(count * size); 

직선을 사용하여 이상 실행에 어떤 이점을 볼 수 없습니다.

+0

입력 해 주셔서 감사합니다. 나는 그들을 추가 할 것이다. 여기에 래퍼를 사용하면 장점이 더 많습니다. 이 코드를 다른 플랫폼으로 이식 할 때 한 곳에서 기능을 변경하는 것이 더 쉽습니다. – C0D3R

+0

@ C0D3R 당신이 편집 할 수있는 질문에 래퍼를 사용하는 이유를 추가하는 것이 유용 할 것입니다. – imp25

+0

다시 한 번 감사드립니다! – C0D3R