微软在麻省理工学院许可下开放了一个图书馆
mimalloc 的主要特点是其紧凑的实现(少于 3500 行代码)和非常高的性能。 在
为了评估性能,需要使用一组现有的
高性能主要是通过使用空闲列表分片来实现的。 mimalloc 没有使用一个大列表,而是使用一系列较小的列表,每个列表都绑定到一个内存页。 这种方法减少了碎片并增加了内存中的数据局部性。 内存页是一组大小相似的块的分组。 在 64 位系统上,页面大小通常为 64 KB。 如果页面中没有剩余占用的块,则将其完全释放并将内存返回给操作系统,这会减少长时间运行的程序中的内存成本和碎片。
该库可以包含在链接阶段或为已组装的程序加载(“LD_PRELOAD=/usr/bin/libmimalloc.so myprogram”)。 图书馆还提供
可以以安全模式构建库,其中在块边界处替换特殊内存检查页(保护页),并使用块分布的随机化和已释放块列表的加密。 此类措施允许您阻止利用基于堆的缓冲区溢出的最典型技术。 启用安全模式后,性能会下降大约 3%。
在mimalloc的特性中,还值得注意的是它不易受到大碎片导致的膨胀问题的影响。 在最坏的情况下,元数据的内存消耗会增加 0.2%,分布式内存的内存消耗会达到 16.7%。 为了避免访问资源时发生冲突,mimalloc 仅使用原子操作。
来源: opennet.ru