malloc和free是如何实现的?

Squ*_*all 12 c++ dynamic-memory-allocation

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

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

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

对于Linux,我没有找到任何系统调用堆管理.在Linux上,malloc和free是系统调用,不是吗?

谢谢

编辑:
C++不提供垃圾收集器和垃圾收集器很慢.有些分配很容易免费,但有些分配需要垃圾收集器.

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

nos*_*nos 15

在linux上,malloc和free不是系统调用.malloc/free通过使用brk系统调用扩展和收缩(如果可以)数据段以及获取匿名内存来获取内核中的 内存mmap- 并且malloc管理这些区域内的内存.一些基本信息可以在这里找到很多很棒的参考资料


nin*_*alj 5

在* nix中,malloc()在C库级别实现。它使用brk()/ sbrk()来增长/缩小数据段,并使用mmap / munmap来请求/释放内存映射。请参见本页以了解glibc和uClibc中使用的malloc实现。