我想实现我自己的动态内存管理系统,以添加有助于管理 C++ 内存的新功能。
我使用 Windows (XP) 和 Linux (Ubuntu)。
实现“malloc”和“free”等功能需要什么?
我认为我必须使用最低级别的系统调用。
对于 Windows,我找到了以下函数:GetProcessHeap、HeapAlloc、HeapCreate、HeapDestroy 和 HeapFree。
对于Linux,我还没有发现任何用于堆管理的系统调用。在Linux上,malloc和free是系统调用,不是吗?
Thanks
Edit:
C++不提供垃圾收集器,并且垃圾收集器速度很慢。有些分配很容易释放,但有些分配需要垃圾收集器。
我想实现这些功能并添加新功能:
* 每当调用 free() 时,检查指针是否属于堆。
* 帮助垃圾收集。我必须存储一些有关分配块的信息。
* 使用多个堆(Windows 上的 HeapCreate/HeapDestroy)。我可以快速删除整个堆及其分配的块。
在linux上,malloc和free不是系统调用。 malloc/free 通过使用扩展和收缩(如果可以的话)数据段从内核获取内存brk
系统调用以及获取匿名内存mmap
- malloc 管理这些区域内的内存。一些基本信息可以找到许多很棒的参考资料here
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)