【发布时间】:2011-02-03 08:16:29
【问题描述】:
请就用于测试 C 和 C++ 分配器的基准提供建议?考虑满足以下任一方面的基准:
- 速度
- 碎片化
- 并发
谢谢!
【问题讨论】:
-
你想测试它的哪个方面,速度,碎片等?
标签: c++ c memory memory-management benchmarking
请就用于测试 C 和 C++ 分配器的基准提供建议?考虑满足以下任一方面的基准:
谢谢!
【问题讨论】:
标签: c++ c memory memory-management benchmarking
如果您询问 C/C++ 程序的通用分配器,那么我发现这篇论文 Hoard: A Scalable Memory Allocator for Multithreaded Applications 考虑了这个问题。这是本文档的引述
目前还没有标准套件 评估基准 多线程分配器。我们知道 没有特别强调的基准 服务器的多线程性能 Web 服务器 1 和 数据库管理员。我们选择了基准 在其他论文中描述和 否则发表(拉森 Larson 和 Krishnan 的基准测试 [22] 和来自的 shbench 基准 MicroQuill, Inc. [26]),两个 多线程应用程序 包括基准(BEMengine [7] 和 barnes-hut [1, 2]),并写了一些 我们自己强调的微基准 内存分配的不同方面 性能(线程测试,主动假, 被动错误)。
这篇论文有点旧了。然而,我最近看到了一个用于 HP-UX (MallocNextGen) 的分配器,而 HP 也不能确保它适用于所有可能的应用程序。它说:
新的分配器一般是 有望提高业绩 应用程序。然而,可能有 一些应用程序 性能可能会下降。因此用户 建议对其进行基准测试 具有默认内存的应用程序 libc 中的分配器和 使用前 libmallocng 中的分配器 生产中的新分配器 环境。
至于速度和并发性,我自己的经验是,您必须衡量自己程序的性能才能比较两个不同的分配器。如果我们谈论 Linux,您可以使用 LD_PRELOAD 来加载不同的分配器。
【讨论】:
几年前我自己测试了几个分配器,我的经验是结果都取决于测试的类型。如果您想自己编写一些基准测试,请考虑以下情况:
您会注意到每次测试的结果都会有所不同。在一种情况下非常好的分配器,在其他情况下可能很差。
在实践中,这意味着最好在您的应用程序中,在真实/真实的情况下对其进行测试。
【讨论】:
您可以下载nedmalloc 并尝试将您的分配器与它进行比较。它有一个名为test.c 的测试和源代码,你可以根据你的分配器重写它。
【讨论】: