gpt4 book ai didi

c - 循环中的malloc,所有分配的 block 都是连续的吗?

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

我有一个使用本地数组的函数。我想返回一个指向它的指针,但是除非手动分配内存,否则当然不能这样做。因此我想知道分配是否像这样:

for(i = 0; i < 26; i++)
{
llist[i] = malloc(sizeof(SomeStruct));
}

以后可以像这样释放:

// (where ptr is a pointer to the first allocation in llist)

for(i = 0; i < 26, i++)
{
free(ptr);
ptr += sizeof(SomeStruct);
}

编辑:

看来我做不到。有什么方法可以释放所有内存,只给出指向第一个元素的指针?还是我应该完全采用不同的方法?

最佳答案

不,它不能。不能保证这些 block 是连续分配的。事实上,它们几乎肯定不是我见过的所有现代实现。大多数存储 block 的大小,通常在每个 block 之前存储其他信息。此外,如果您的内存碎片化, block 可能会在其他数据之间的可用空间中的任何地方结束,那里没有足够的空间来连续放置它们。

关于c - 循环中的malloc,所有分配的 block 都是连续的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8217694/

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