可扩展的内存分配器体验

2023-11-23

我目前正在评估一些可扩展的内存分配器,即 nedmalloc 和 ptmalloc(两者都构建在 dlmalloc 之上),作为默认 malloc / new 的替代品,因为在多线程环境中出现了严重的争用。他们公开的表现似乎不错,但我想看看其他真正使用过它们的人的体验如何。

  • 您的绩效目标是否得到满足?
  • 您是否遇到过任何意外或难以解决的问题(例如堆损坏)?
  • 如果您尝试过 ptmaalloc 和 nedmalloc,您会推荐哪一个?为什么(易用性、性能)?
  • 或者您可能会推荐另一个可扩展的分配器(免费且有许可的优先)?

我已经在我们的应用程序中实现了 NedMalloc,并且我对结果非常满意。我之前看到的争用已经消失了,分配器很容易插入,甚至总体性能也非常好,到目前为止,应用程序的内存分配开销现在几乎无法测量。

我没有尝试 ptmalloc,因为我没有找到它的 Windows 就绪版本,而且一旦 NedMalloc 对我来说工作得很好,我就失去了动力。

除了提到的两个之外,我认为尝试一下也可能很有趣TCMalloc- 它具有一些理论上听起来比 NedMalloc 更好的功能(例如,与 NedMalloc 使用的 4 B 标头相比,小分配的开销非常小),但是,由于它似乎没有准备好 Windows 端口,因此它也可能变得不可用非常简单。


使用 NedMalloc 几周后,我被迫放弃它,因为事实证明它的空间开销对我们来说太高了。尤其令我们震惊的是,NedMalloc 似乎正在以一种糟糕的方式回收操作系统不再使用的内存,但仍保留大部分内存。现在我已将其替换为JEMalloc,看起来没有那么快(它仍然很快,但不如 NedMalloc 快),但这种方式非常健壮,可扩展性也很好。


使用 JEMalloc 几个月后,我转向了 TCMalloc。与其他的相比,它需要花费更多的精力来适应 Windows,但它的结果(性能和碎片)似乎是我迄今为止测试过的最好的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可扩展的内存分配器体验 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 未提供参数时如何指定 C# System.Commandline 行为?

    在我的控制台应用程序中 当未提供控制台参数时 将执行我指定列表 在本例中为参数 3 的任何处理程序 调用该处理程序时 布尔参数设置为 false 但对我来说 根本不调用它更有意义 如何防止这种情况发生并显示帮助文本 using System
  • 为什么 int8_t 和用户通过 cin 输入显示奇怪的结果[重复]

    这个问题在这里已经有答案了 一小段代码让我发疯 但希望你能阻止我跳出窗外 看这里 include
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 错误:表达式不产生值

    我尝试将以下 C 代码转换为 VB NET 但在编译代码时出现 表达式不产生值 错误 C Code return Fluently Configure Mappings m gt m FluentMappings AddFromAssemb
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • 使用

    因此 我决定开始使用 C 进行编程 我所做的一件事就是创建一个 pausec exe pause exe 克隆 它有效 但是当像这样调用它时 lt nul pausec 它崩溃了 据我所知 我得到的错误是这样的 未处理的异常 System
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • WebSocket安全连接自签名证书

    目标是一个与用户电脑上安装的 C 应用程序交换信息的 Web 应用程序 客户端应用程序是 websocket 服务器 浏览器是 websocket 客户端 最后 用户浏览器中的 websocket 客户端通过 Angular 持久创建 并且

随机推荐

  • 使用 setCompoundDrawables 进行 EditText 时计算图像大小

    当我添加如下图标时 etComment EditText findViewById R id et comment Drawable img getResources getDrawable R drawable warning etCom
  • 如何在Play Framework中定义任意任务? (如红宝石耙子)

    如何在Play Framework中定义任意任务 我的意思是任务从命令行运行 类似于 ruby rake 我知道 ant 工具 但正在寻找更好的替代方案 对于 Play 2 您可以按照此处的文档使用 SBT 创建新任务 http www s
  • 我可以在不使用 HTTPS 连接的情况下使用 SSL 证书吗?

    我有点困惑 如果 SSL 证书有助于识别您已连接到受信任的服务器 那么为什么需要使用加密 HTTPS 连接呢 我可以使用 SSL 证书进行 HTTP 连接吗 这里有一个误解 证书不是 SSL 使用证书的是SSL 但证书是在SSL之前诞生的
  • 沿弧线对 UIView 进行动画处理

    我希望沿着图中所示的弧线对视图进行动画处理 从位置 1 到位置 2 实际发生的情况是 视图动画描述的是一个完整的圆而不是圆弧 我的问题是 我应该使用CGPath添加弧 or CGPath添加圆弧到点 我需要使用吗CGPath移动到点是否描述
  • RESTful删除策略

    假设我有一个资源 在调用删除时可以有两种不同的行为 资源被删除 资源被移至回收站 如何以符合 REST 的方式对其进行建模 我想到了以下解决方案 DELETE myresource 将资源移至回收站 默认行为 DELETE myresour
  • 检查 PowerShell 中每行的第一个字符是否有特定值

    我正在读取包含特定格式数字的文本文件 我想弄清楚该行的第一个字符是 6 还是 4 并将整行存储在数组中以供以后使用 因此 如果该行以 6 开头 则将整行添加到 SixArray 中 如果该行以 4 开头 则将整行添加到 fourArray
  • 核心运动错误102是什么意思?

    我使用 Core Motion 的传感器融合来获取北向运动更新 motionManager startDeviceMotionUpdatesUsingReferenceFrame CMAttitudeReferenceFrameXTrueN
  • 如何将 openssl 添加到 swift 项目

    我正在学习如何向我的 iOS OSX 项目添加应用内购买收据验证 有一个很好的概述hereWWDC14 有关于这个主题的精彩视频 示例代码很多 但每个人都跳过一步 如何导入 openSSL 标头 swift 编译器抱怨没有这样的模块 imp
  • 在一个 SQL 查询中合并两个表并使日期值唯一

    我有以下两个表 您也可以在 SQL fiddle 中找到它们here CREATE TABLE Inbound Inbound Date DATE Product TEXT InboundType TEXT Quantity VARCHAR
  • 对于每个 int x: x+1 > x .... 这总是正确的吗?

    我刚刚开始在学校学习 C 我正在努力掌握基本概念 我们的作业有一个问题 对于每一个int x x 1 gt x 判断正确与否 正确则给出推理 错误则给出反例 我很困惑 因为我们被告知 int 类型是 32 位 这基本上意味着整数是二进制格式
  • iOS 8.3 Xcode 6.3.1 中未调用核心位置委托方法

    我试图使用 Xcode 6 3 1 中的核心位置框架获取用户的当前位置 我做了以下事情 Added 核心位置框架 under Target gt General gt 链接的框架和库 My 视图控制器 h文件如下图所示 import
  • 使用ajax通过POST向php传递多个参数

    我正在尝试使用 AJAX 通过 POST 方法将多个参数传递到我的 PHP 文件 以便我可以对 MySQL 数据库进行查询 HTML 文件 div class dropdown dropdown dark div
  • 使用 Devise after_sign_in_path_for 重定向循环

    我有一个菜鸟问题 我想要设计重定向到用户访问的最后一个页面 所以我做了以下 def after sign in path for resource request referer end 效果很好 除非用户实际上通过原始表单登录 这会导致重
  • 在 C++ 中,通过引用扩展范围是否安全?

    在 C 中 通过引用扩展范围是否安全 在代码中 我的意思是 MyCLass function badIdea MyClass obj1 return obj1 通过引用扩展范围是不安全的 C 中的对象没有引用计数 当 obj1 超出范围时
  • XFL - ./bin/*.dat 文件是什么?

    未压缩的 Adob e Flash XFL 格式仍保留大量压缩内容 有人知道这些二进制 dat 文件的规范吗 dat 文件存储各种类型的媒体内容 到目前为止我能说的是 图像存储为 JPEG 没有附加信息 这意味着只需重命名 dat 就足以获
  • 创建自定义上传进度条

    我见过所有的上传进度条插件 小部件等 它们都很糟糕 它们要么体积太大 有太多无用的代码 要么不起作用 我想知道在哪里可以阅读如何显示简单的上传进度指示器 大多数浏览器下面都有一个状态进度条 但在与客户打交道时仅使用它不太专业 浏览器是如何做
  • Android手写识别[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我需要分析android手写识别SDK 谁能告诉我市场上有哪些 SDK 我发现了MyScript来自 VisionObjects 但我找不到 SDK 的任何下载链接 因为我需要测试以
  • 将数字格式设置为固定宽度,并带有前导零[重复]

    这个问题在这里已经有答案了 下面的代码 a lt seq 1 101 25 b lt paste name 1 length a sep 产生这个输出 name 1 name 26 name 51 name 76 name 101 我希望所
  • 使用参数包将 lambda 转换为 std::function

    SO 有几个问题与将 lambda 转换为std functions 但我还没有看到使用参数包作为参数列表的 这在我的 g 版本 7 1 1 4 上似乎被破坏了 并且可能只是不受支持 那么这是合法的 c 17 按照标准 吗 如果没有 为什么
  • 可扩展的内存分配器体验

    我目前正在评估一些可扩展的内存分配器 即 nedmalloc 和 ptmalloc 两者都构建在 dlmalloc 之上 作为默认 malloc new 的替代品 因为在多线程环境中出现了严重的争用 他们公开的表现似乎不错 但我想看看其他真