gpt4 book ai didi

c++ - 为什么要设计自定义内存管理器?

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:52 24 4
gpt4 key购买 nike

我过去设计过简单的固定 block 存储管理器 (SM) 和通用内存管理器。在这两种情况下,我都在启动时分配了大量堆内存,并一次又一次地重新使用释放的内存,以防止频繁调用昂贵的 ma​​lloc/new 调用。

如果我谈论固定 block SM(Github link)),那么我实际上已经看到它带来的性能优势。在我的例子中,随机大小分配大约提高了 40%。

但是对于通用内存管理器 ( Github link )(没有内存池),我没有看到任何明显的性能提升。我能看到的唯一收获是访问内存使用统计信息。性能方面,由于确定空闲 block (分配期间)和映射中的内存位置(释放期间)的开销,它变得更慢。

所以我的问题是,在什么情况下自定义通用内存分配器会有用?值得付出努力吗?

最佳答案

性能并不是开发自定义分配器的唯一原因。其他原因可能包括:

  1. 更好的调试能力
    如果有一个内存管理器可以帮助定位一些常见的编程错误,比如使用未初始化的内存、访问分配 block 之外的内存、双重释放、释放后使用,那不是很好吗?但是,一个好的操作系统内存管理器可能已经提供了所有这些开箱即用的功能。
  2. 实现内存使用配额
    在较大的项目中,您可能会担心内存消耗,尤其是在使用某些第三方模块的情况下。最好不要让流氓模块让所有其他模块挨饿。
  3. 保证分配
    有时您想确保某个关键功能永远不会失败。预分配大块内存并提供自定义分配器可能是所需的步骤之一。
  4. 强制内存清理在不受信任的插件之后。
    保护您的应用程序免受与内存消耗完全相同的不健康情况的影响。
  5. 独立系统可能根本没有任何内存管理器。 :-)

关于c++ - 为什么要设计自定义内存管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167252/

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