C语言 实现用户定义的 malloc() 函数



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

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

最近在一次采访中被问到。

维基百科实际上提供了各种malloc实现的良好摘要,包括针对特定条件优化的实现,以及了解有关实现的更多信息的链接。

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

德马尔洛克

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

杰马尔洛克

为了避免锁争用,jemalloc 为每个 CPU 使用单独的"竞技场"。测量多线程应用程序中每秒分配次数的实验表明,这使得它与线程数呈线性扩展,而对于phkmalloc和dlmalloc,性能与线程数成反比。

囤积内存分配器

Hoard 只使用 mmap,但以 64 KB 的块管理内存,称为超级块。囤积的堆在逻辑上分为单个全局堆和多个每个处理器的堆。此外,还有一个线程本地缓存,可以容纳有限数量的超级块。通过仅从本地每线程或每处理器堆上的超级块中分配,并将大部分空的超级块移动到全局堆中,以便其他处理器可以重用它们,Hoard 将碎片保持在较低水平,同时实现了线程数近乎线性的可扩展性。

TCMALLOC

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

dmalloc(未被维基百科覆盖

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

我认为这是 malloc 的一个很好的例子,在 C 编程语言书的第 8.7 章中:

相关内容

  • 没有找到相关文章

最新更新