2013-10-25 69 views
0

我爲我的項目使用了以下包裝函數。我將在很多地方使用它。我懷疑要繼續使用此函數,或者使用宏或內聯函數,因爲我將在很多地方使用它。有人可以建議什麼是最好的,因爲我將在小型嵌入式設備中使用此代碼。我在這裏使用包裝來保持我的代碼在不同的平臺上移植。內存分配和項目的免費包裝

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)不會做任何事情,如果ptrNULL,所以你可以在你的mem_deallocate()功能剝離下來的東西是這樣的:

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

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

這將節省你上,由於進入到if任何分支;並使功能內容相當小。把這個作爲一個函數而不是把它的內容放入內聯的開銷將被最好地測試。

也在您的mem_allocate()爲什麼不檢查在memmalloc?在目前的格式中,我看不到使用它的任何優勢。只需使用

void *mem = malloc(count * size); 

直接在您的代碼中,不需要調用該函數。

+0

感謝您的意見。我會添加它們。那麼我在這裏使用包裝的一個更多的優勢。當我將此代碼移植到不同的平臺時,我更容易在一個地方更改該功能。 – C0D3R

+0

@ C0D3R增加使用包裝器來解決問題的原因將會很有用,您可以將其加入。 – imp25

+0

完成並再次感謝! – C0D3R