gpt4 book ai didi

c++ - *不*在分配的内存上使用 free() 是否可以?

转载 作者:IT老高 更新时间:2023-10-28 12:00:57 25 4
gpt4 key购买 nike

我正在学习计算机工程,并且我有一些电子类(class)。我从我的两位教授(这些类(class)的)那里听说可以避免使用 free() 函数(在 malloc()calloc( ) 等),因为分配的内存空间可能不会再次用于分配其他内存。也就是说,例如,如果您分配 4 个字节然后释放它们,您将有 4 个字节的空间可能不会再次分配:您将有一个 hole

我认为这很疯狂:你不能有一个 not-toy-program 来在堆上分配内存而不释放它。但是我没有知识来准确解释为什么对于每个 malloc() 都必须有一个 free() 如此重要。

那么:有没有适合使用 malloc() 而不使用 free() 的情况?如果不是,我该如何向我的教授解释?

最佳答案

简单:只需阅读几乎所有半严肃的 malloc()/free() 实现的源代码。我的意思是实际的 memory manager处理调用的工作。这可能在运行时库、虚拟机或操作系统中。当然,代码并非在所有情况下都可以同等访问。

通过将相邻的孔连接成更大的孔来确保内存不碎片化是非常常见的。更严格的分配器使用更严格的技术来确保这一点。

因此,假设您进行了 3 次分配和取消分配,并按以下顺序将 block 放置在内存中:

+-+-+-+
|A|B|C|
+-+-+-+

各个分配的大小无关紧要。然后释放第一个和最后一个,A 和 C:

+-+-+-+
| |B| |
+-+-+-+

当你最终释放 B 时,你(最初,至少在理论上)最终得到:

+-+-+-+
| | | |
+-+-+-+

它可以被分解成只是

+-+-+-+
| |
+-+-+-+

即一个更大的空闲 block ,没有碎片。

根据要求提供引用:

关于c++ - *不*在分配的内存上使用 free() 是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22481134/

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