gpt4 book ai didi

c++ - 当我们使用 new 分配内存时,操作系统会做什么样的簿记?

转载 作者:行者123 更新时间:2023-11-30 03:07:34 28 4
gpt4 key购买 nike

除了要记住对象指针的地址外,我认为OS还需要记录内存的大小。这样当我们使用 delete 时,操作系统就会知道要释放多少内存。

谁能告诉我更多细节?还记录了哪些信息?这些信息存储在哪里?删除内存后操作系统会做什么?

最佳答案

如前所述,new 是一个库函数,而不是操作系统功能。

一般情况大概是这样的:

  • C++ 编译器将 new 关键字转换为对 malloc()(或等效)的函数调用

  • 分配器保留一个空闲内存块列表,它在那里搜索最佳匹配项。

  • 通常,“最佳”匹配比您的程序要求的数量更大。如果是这样,分配器将拆分块,用大小(可能还有一些其他元数据)标记一个,将其余部分放回空闲列表,并将分配的 block 返回给您的程序。

  • 如果找不到合适的空闲 block ,分配器会从操作系统请求一些内存块。有几种方法可以做到这一点,但它通常被认为是一个缓慢的操作,所以它要求更大的步骤(一次至少一页,通常是 4KB)。当它获得新的空闲 block 时,拆分为请求的大小,其余的放入空闲列表。

  • 操作系统是控制处理器的 MMU(内存管理单元)的操作系统。该单元将当前运行的进程看到的线性地址转换为 RAM 页的物理地址。这允许操作系统灵活地为每个进程分配和释放 RAM 页面。

  • 每个进程都有一个不同的内存映射,这允许每个进程“看到”一个线性内存空间,同时保持每个进程与其他进程隔离。操作系统负责在每次进程切换时将映射加载和卸载到 MMU 中。为进程分配新页面最终意味着将其添加到进程的内存映射中。

关于c++ - 当我们使用 new 分配内存时,操作系统会做什么样的簿记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5752239/

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