c - 项目的内存分配和释放包装器

标签 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;
}

最佳答案

如果 ptrNULL

free(ptr) 将不执行任何操作,因此您可以精简 mem_deallocate() 函数如下:

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

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

这将节省您由于 if 而发生的任何分支;并且使得功能内容变得相当小。将其作为一个函数而不是将其内容内联的开销最好通过经验测试。

另外,在您的 mem_allocate() 中,为什么不在 malloc 之后检查 mem 中的 NULL ?在当前的格式下,我没有看到运行它比仅使用它有任何优势

void *mem = malloc(count * size); 

直接在代码中,无需调用函数。

关于c - 项目的内存分配和释放包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19581017/

相关文章:

c - 以编程方式获取 Linux 设备资源信息

c - 程序无限循环

c - 如何正确释放链表的所有元素?

c - 多线程程序中的双重释放或损坏

c - 二维数组struct — malloc()和free()

c - 在 free(x) 中将 null 值设置为 x(在语言实现中)

c - 如何在 Linux 上使用 C libexpat 逐行解析 xml 文件?

c++ - 如何创建接受参数的dll

c - (C) 为什么我可以访问超出给定限制的数组元素?

c++ - gperftools 中的明显内存泄漏