3

如何创建用malloc()C 语言定义的新函数?

我什至没有关于如何做到这一点的精灵提示,如何将虚拟空间地址与物理空间映射,遵循什么算法?我确实知道 malloc() 效率不高,因为它会导致碎片。所以可以创造一些有效的东西。即使效率不高,如何实现一个幼稚的 C malloc 函数?

最近在接受采访时被问到。

4

2 回答 2

7

Wikipedia 实际上提供了各种 malloc 实现的很好的总结,包括针对特定条件优化的实现,以及了解更多有关实现的链接。

http://en.wikipedia.org/wiki/C_dynamic_memory_allocation

dlmalloc

通用分配器。GNU C 库 (glibc) 使用基于 dlmalloc 的分配器。

杰马洛克

为了避免锁争用,jemalloc 为每个 CPU 使用单独的“arenas”。在多线程应用程序中测量每秒分配数的实验表明,这使得它与线程数成线性关系,而对于 phkmalloc 和 dlmalloc 来说,性能与线程数成反比。

囤积内存分配器

Hoard 专门使用 mmap,但以 64 KB 的块(称为超级块)管理内存。Hoard 的堆在逻辑上分为单个全局堆和多个每个处理器的堆。此外,还有一个线程本地缓存,可以容纳有限数量的超级块。通过仅从本地每个线程或每个处理器堆上的超级块分配,并将大部分为空的超级块移动到全局堆以便它们可以被其他处理器重用,Hoard 保持低碎片,同时实现与线程数接近的线性可伸缩性.

tcmalloc

每个线程都有用于小分配的本地存储。对于大型分配,可以使用 mmap 或 sbrk。TCMalloc 是 Google 开发的 malloc,具有用于本地存储死线程的垃圾收集。对于多线程程序,TCMalloc 被认为比 glibc 的 ptmalloc 快两倍以上。

dmalloc维基百科未涵盖

调试内存分配或 dmalloc 库被设计为替代系统的 malloc、realloc、calloc、free 和其他内存管理例程,同时提供在运行时可配置的强大调试工具。这些工具包括内存泄漏跟踪、fence-post 写入检测、文件/行号报告和一般统计记录。

于 2012-08-10T16:56:47.927 回答
3

我认为这是C Programming Language 书 8.7 章中的一个例子中的 malloc 的一个很好的例子:

于 2012-08-10T16:52:20.567 回答