gpt4 book ai didi

c - 为什么 malloc(0) 在 Windows 中返回一个非空地址?

转载 作者:太空狗 更新时间:2023-10-29 16:42:48 26 4
gpt4 key购买 nike

下面的代码在 Windows 中执行时返回一个地址,尽管我期望它返回 NULL。

int main()
{
char *ptr = NULL;
ptr = malloc(0);
printf("malloc returned = %u\n", ptr);

}

是什么促使了这样的 malloc 实现?这背后有什么原因吗?

因为这是一个 0 字节的内存,所以我没有尝试写入任何数据。但是,这个内存可以用于任何事情吗?

最佳答案

这只是您请求的最小尺寸。由于 Win32 堆中没有零长度 block ,您可以:

void *p = malloc(0);
// ... do some stuff in between...
realloc(p, n);

这应该主要导致重用堆的一个 block (如果你幸运并且新的大小很小)。一个小的机会主义优化(或减速,取决于上下文和血咖啡水平)。

这是一个简化的例子。实际情况可能是一个类在创建时分配缓冲区并允许增长它。如果输入控制起来很烦人,您可以让它进行零大小的缓冲区分配。

关于c - 为什么 malloc(0) 在 Windows 中返回一个非空地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9723030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com