内存分配和项目的自由包装器

时间:2013-10-25 04:17:27

标签: c malloc free

我正在为我的项目使用以下包装函数。我打算在很多地方使用它。我有一个疑问,继续使用这个函数或者使用宏或内联函数,因为我将在很多地方使用它。有人可以建议什么是最好的,因为我将在一个小型嵌入式设备中使用此代码。我在这里使用包装器来保持我的代码可以在不同的平台上移植。

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 个答案:

答案 0 :(得分:1)

如果free(ptr)ptr

NULL将不执行任何操作,因此您可以将mem_deallocate()函数删除为以下内容:

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

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

这样可以省去由if引起的任何分支;并使功能内容非常小。将此作为一个函数而不是将其内容放入内联的开销将是最好的测试。

同样在mem_allocate()中,您为什么不在NULL之后mem查看malloc?在目前的格式中,我认为仅使用

运行它没有任何优势
void *mem = malloc(count * size); 

直接使用代码,而不调用函数。