gpt4 book ai didi

malloc - 使用jemalloc,malloc,calloc和其他常见替代方法的优缺点是什么?

转载 作者:行者123 更新时间:2023-12-04 21:56:43 28 4
gpt4 key购买 nike

今天阅读Rust subreddit时,我发现以下评论:


jemalloc针对(多线程)速度而不是内存使用进行了优化


经过更多研究后,我发现还有更多选择(例如calloc)。

我想了解不同内存分配器的优点和缺点?

如果这个问题看起来很愚蠢,那么我的背景主要是解释性语言(不会暴露出这种精细的内存控制)。

最佳答案

malloccallocrealloc

这些功能不是不同的分配器。它们是从同一分配器请求内存的不同方法。


malloc提供内存而无需初始化(填充了先前存储在其中的任何用户)。
callocmalloc相同,但也会初始化内存(用零字节0x00填充内存)。
realloc占用已经分配的内存,并允许用户调整其大小。


因此,在分配器及其不同的实现方式中,malloccallocrealloc不会独立列出,因为每个分配器实现都需要自己的这些函数版本。

jemallocptmalloc,...

当某人想要实现一个不同的分配器时,他不能(默认但不能)将其命名为malloc,因为它将与C标准库冲突。相反,他们通常给它一个不同的前缀,例如jemallocptmallocnedmalloctcmallocothers

值得一提的是,C标准库本身也有多种实现,并且每种实现都会以不同的方式实现其分配器。因此,malloc将基于编译代码时所使用的标准库而具有不同的实现。示例包括:GNU C标准库,MSVC标准库等。

不同的分配器之间有什么区别?

要知道每种实现的确切优缺点,必须阅读每个实现的作者的文档,如果有的话,阅读代码以了解算法,或者阅读专家或专家讨论该特定问题的文章/研究论文。实施。

但是,如果要对这些实现之间的差异进行分类,我将列出以下内容:


一些实现专注于某些使用模式,并尝试以最佳方式对其进行优化,甚至以降低其他情况的效率为代价。 jemalloc就是一个例子,他们专注于优化来自多个线程的分配以使其更快,但以使用更多的内存为代价。这些类型的分配器通常是在仔细调查特定案例后才部署的,这些案例表明它将受益于这种权衡。
一些实现对分配器的使用设置了一定的限制,以使其更快。单线程分配器就是一个例子,它将消除对同步对象的需求,以使其更快。
其他实现则尽可能地达到通用目的,不希望任何情况都比其他实现更有利。此类别包括标准库中包含的默认分配器。

关于malloc - 使用jemalloc,malloc,calloc和其他常见替代方法的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46252149/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com