Nav*_*K N 9 c malloc memory-management
我是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;
}
Run Code Online (Sandbox Code Playgroud)
问题
malloc(1)?release_pack_memory和我在整个源代码中找不到这个函数实现.#ifdef XMALLOC_POISON memset(ret, 0xA5, size);作用?我打算在我的项目中重用这个功能.这是一个很好的包装malloc?
任何帮助都会很棒.
malloc(0) 不适用于所有平台,在这种情况下,会进行一字节分配。允许分配 0 长度的内存块可以简化程序的高层逻辑。
不知道。
通过用非零值填充分配的内存,可以更容易地发现程序中在没有正确初始化的情况下使用内存的错误:在这种情况下,程序几乎会立即崩溃。由于填充内存需要时间,因此它被包装在预处理器定义中,因此仅在需要时才进行编译。