h4c*_*k3d 3 c malloc operating-system memory-management
如何创建用malloc()C语言定义的新函数?
我甚至没有关于如何做到这一点,如何将虚拟空间地址与物理空间映射,以及要遵循什么算法?我知道malloc()效率不高,因为它可能导致碎片.因此可以创建一些有效的东西.即使效率不高,如何实现一个天真的C malloc功能呢?
最近在接受采访时被问到.
维基百科实际上提供了各种malloc实现的很好的总结,包括针对特定条件优化的实现,以及用于了解有关实现的更多信息的链接.
http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
通用分配器.GNU C库(glibc)使用基于dlmalloc的分配器.
为了避免锁争用,jemalloc为每个CPU使用单独的"竞技场".在多线程应用程序中测量每秒分配数量的实验表明,这使得它与线程数量成线性关系,而对于phkmalloc和dlmalloc,性能与线程数量成反比.
Hoard专门使用mmap,但是以64千字节的块为单位管理内存,称为超级块.Hoard的堆在逻辑上分为单个全局堆和多个每处理器堆.此外,还有一个线程本地缓存,可以容纳有限数量的超级块.通过仅分配本地每线程或每处理器堆上的超级块,并将大多数空的超级块移动到全局堆,以便其他处理器可以重用它们,Hoard保持低碎片,同时通过线程数实现近线性可伸缩性.
每个线程都有本地存储空间用于小分配.对于大型分配,可以使用mmap或sbrk.由Google开发的malloc TCMalloc具有用于本地存储死线程的垃圾收集.对于多线程程序,TCMalloc被认为是glibc的ptmalloc的两倍多.
dmalloc (维基百科未涵盖)
调试内存分配或dmalloc库被设计为系统的malloc,realloc,calloc,free和其他内存管理例程的替代品,同时提供在运行时可配置的强大调试工具.这些工具包括内存泄漏跟踪,围栏后写入检测,文件/行号报告以及统计信息的一般记录.