我希望实现我自己的动态内存管理系统,以便添加有助于在C++中管理内存的新功能。
我使用Windows (XP)和Linux (Ubuntu)。实现像“malloc”和“free”这样的函数需要什么?我认为我必须使用最低级别的系统调用。
对于Windows,我找到了函数: GetProcessHeap、HeapAlloc、HeapCreate、HeapDestroy和HeapFree。
对于Linux,我没有发现任何系统调用堆管理。在Linux上,malloc和free是系统调用,不是吗?
谢谢
编辑:
C++不提供垃圾收集器,垃圾收集器也很慢。有些分配很容易释放,但是有些分配需要垃圾收集器。
我想实现这些功能并添加新功能:
*每当调用free()时,检查指针是否属于堆。
*协助收集垃圾。我必须存储一些有关分配块的信息。
*使用多个堆(Windows上的HeapCreate/HeapDestroy)。我可以快速删除整个堆及其分配的块。
发布于 2010-07-28 22:29:14
在linux上,malloc和free不是系统调用。malloc/free通过使用brk系统调用扩展和缩小数据段以及使用mmap获得匿名内存从内核获得内存,而malloc则管理这些区域内的内存。一些基本信息--任何许多重要的参考资料--都可以找到这里
发布于 2010-07-28 22:31:59
在*nix中,malloc()在C库级别上实现。它使用brk()/sbrk()增长/收缩数据段,使用mmap/munmap请求/释放内存映射。有关在glibc和uClibc中使用的malloc实现的描述,请参见此页。
发布于 2010-07-28 22:30:07
如果您只是简单地包装系统调用,那么使用标准malloc可能不会获得任何信息--这就是他们所做的一切。
更常见的是malloc (或HeapAlloc()等)在程序开始时的单个内存块,并自己管理分配到其中的内存,如果您知道要定期创建/丢弃许多小内存块,那么这样做的效率会更高。
https://stackoverflow.com/questions/3358045
复制相似问题