我正在为我的项目使用以下包装函数。我将在很多地方使用它。我对继续使用此函数或使用宏或内联函数有疑问,因为我将在很多地方使用它。有人可以建议什么是最好的,因为我将在小型嵌入式设备中使用此代码。我在这里使用包装器来保持我的代码在不同平台上的可移植性。
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;
}
最佳答案
如果 ptr
为 NULL
,
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/