gpt4 book ai didi

c++ - malloc 和 free 是如何实现的?

转载 作者:IT老高 更新时间:2023-10-28 23:11:41 32 4
gpt4 key购买 nike

我想实现自己的动态内存管理系统,以便添加有助于在 C++ 中管理内存的新功能。

我使用 Windows (XP) 和 Linux (Ubuntu)。实现“malloc”和“free”等功能需要什么?我认为我必须使用最低级别的系统调用。

对于 Windows,我找到了函数:GetProcessHeap、HeapAlloc、HeapCreate、HeapDestroy 和 HeapFree。

对于 Linux,我没有发现任何用于堆管理的系统调用。在 Linux 上,malloc 和 free 是系统调用,不是吗?

谢谢

编辑:
C++ 不提供垃圾收集器,垃圾收集器很慢。有些分配很容易释放,但有些分配需要垃圾收集器。

我想实现这些功能并添加新功能:
* 每当调用free()时,检查指针是否属于堆。
*帮助垃圾收集。我必须存储一些有关已分配 block 的信息。
* 使用多个堆(Windows 上的 HeapCreate/HeapDestroy)。我可以快速删除整个堆及其分配的 block 。

最佳答案

在 linux 上,malloc 和 free 不是系统调用。 malloc/free 通过使用 brk 系统调用以及使用 mmap 和 malloc 获取匿名内存来扩展和收缩(如果可以的话)数据段从内核获取内存管理这些区域内的内存。一些基本信息可以找到许多很好的引用资料here

关于c++ - malloc 和 free 是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3358045/

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