我是C的初学者,在阅读git的源代码时,我发现了这个围绕malloc
的包装函数。
void *xmalloc(size_t size)
{
void *ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret) {
release_pack_memory(size, -1);
ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret)
die("Out of memory, malloc failed");
}
#ifdef XMALLOC_POISON
memset(ret, 0xA5, size);
#endif
return ret;
}
问题
- 我不明白他们为什么要使用
malloc(1)
? release_pack_memory
有什么作用,我在整个源代码中找不到这个函数的实现。#ifdef XMALLOC_POISON memset(ret, 0xA5, size);
有什么作用?
我打算在我的项目中重用这个函数。这是对 malloc
的良好包装吗?
任何帮助都会很棒。
最佳答案
malloc(0) 并非在所有平台上都有效,在这种情况下,会进行一个字节的分配。允许分配长度为 0 的内存块可以简化程序的高层逻辑。
不知道。
通过用非零值填充分配的内存,可以更容易地发现在没有正确初始化的情况下使用内存的程序中的错误:在这种情况下,程序几乎会立即崩溃。由于填充内存需要时间,因此它被包装在预处理器定义中,因此仅在需要时才进行编译。
关于c - 包装 malloc - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479700/