首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现malloc和免费?

如何实现malloc和免费?
EN

Stack Overflow用户
提问于 2010-07-28 22:24:21
回答 6查看 6.7K关注 0票数 12

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

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

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

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

谢谢

编辑:

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

我想实现这些功能并添加新功能:

*每当调用free()时,检查指针是否属于堆。

*协助收集垃圾。我必须存储一些有关分配块的信息。

*使用多个堆(Windows上的HeapCreate/HeapDestroy)。我可以快速删除整个堆及其分配的块。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-28 22:29:14

在linux上,malloc和free不是系统调用。malloc/free通过使用brk系统调用扩展和缩小数据段以及使用mmap获得匿名内存从内核获得内存,而malloc则管理这些区域内的内存。一些基本信息--任何许多重要的参考资料--都可以找到这里

票数 16
EN

Stack Overflow用户

发布于 2010-07-28 22:31:59

在*nix中,malloc()在C库级别上实现。它使用brk()/sbrk()增长/收缩数据段,使用mmap/munmap请求/释放内存映射。有关在glibc和uClibc中使用的malloc实现的描述,请参见此页

票数 5
EN

Stack Overflow用户

发布于 2010-07-28 22:30:07

如果您只是简单地包装系统调用,那么使用标准malloc可能不会获得任何信息--这就是他们所做的一切。

更常见的是malloc (或HeapAlloc()等)在程序开始时的单个内存块,并自己管理分配到其中的内存,如果您知道要定期创建/丢弃许多小内存块,那么这样做的效率会更高。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3358045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档