gpt4 book ai didi

memory-management - 释放内存是什么意思?这是否意味着将所有位设置为零?

转载 作者:行者123 更新时间:2023-12-02 06:18:49 24 4
gpt4 key购买 nike

我直接从托管语言开始,几乎没有任何 C++ 经验,因此这个问题可能太基础了。

在像 .net 这样的托管语言中,GC 会释放内存。根据我的阅读,在 C++ 中,这是通过调用 delete 来完成的。但是它对释放内存有什么作用呢?它是否将内存位置的所有位设置为零?或者它是否以其他方式告诉操作系统该内存可供重用?

更新:
我去过this之前,我知道 GC 是做什么的。但这不是我的问题。我不是想问 GC 是如何工作的。我想了解的是,您如何判断某些内存是空闲的?

最佳答案

delete做三件不同的事情:

  • 运行对象的析构函数(或 delete[] 的情况下数组中的所有对象)。
  • 将对象先前使用的内存块标记为空闲。
  • 如果可能,通知操作系统一 block 内存可供其他程序使用。

  • 你的问题是关于 #2 和 #3 在一起,但它们是非常不同的东西。要了解#2 的工作原理,请记住操作系统提供的(通常)单个“堆”被分割成不同大小的较小块。当你用 new 分配一 block 内存时,您将获得指向堆中先前空闲部分的指针,并且运行时执行必要的簿记,将该区域标记为不可用于进一步分配。 delete做相反的事情:它执行将区域标记为再次可用的簿记,可选择将其与相邻的空闲区域合并以减少碎片。随后调用 new在寻找要返回的空闲内存时会考虑该区域。

    换句话说,问内存在被释放时会发生什么是错误的。真正的魔法发生在簿记领域!要了解通用分配器的实现,请谷歌实现 malloc。

    至于#3,这是一个可选步骤,在许多情况下无法执行。只能“归还”恰好位于已分配堆末尾的已释放内存。位于大区域之后的单个分配将消除回馈的可能性。

    关于memory-management - 释放内存是什么意思?这是否意味着将所有位设置为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498565/

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