什么时候MacOSX'免费'图书馆叫madvise,有没有办法控制它?

时间:2013-08-22 19:15:36

标签: performance macos heap

我有一个C ++程序,在OSX 10.8.2上比在Linux上慢得多。分析显示原因是在OSX上调用free(由STL操作产生,FWIW)要慢得多,因为它们会调用madvise,实时消耗在那里。

有没有办法调制OS / X的这种行为?

1 个答案:

答案 0 :(得分:2)

嗯,是的!

我在Linux中遇到了malloc / free的可怕性能问题,并开始寻找替代品。 我想到了两个选项tbbmalloc(英特尔TBB的一部分,即免费BTW)和Google malloc。 经过大量测试后,目前尚不清楚哪个更快(两者中),但两者都明显快于LIBC的实施。

我使用了tbbmalloc,因为它工作得更顺畅,google malloc有一个错误,导致虚拟内存非常大(保留但未提交),这对我的应用程序来说非常糟糕(IT守护程序会杀死它)。

好处:

  • 比libc的malloc好多了。在STL重型应用程序中是3x-300x。
  • 简单集成。没有代码更改。在可执行文件的makefile中添加/更改1行。没有改变SO。

坏事:

  • Mem Checkers不会替换。对于memchk / valgrind /等。恢复原来的malloc。
  • 应用程序会占用10到30%的内存。

我开发的应用程序是一个CAD应用程序,使用10s的GB,构建和销毁数百万种不同的结构(大量的STL地图,矢量,hash_maps)。

如何做到这一点:

在链接器命令中,添加-ltbbmalloc并确保库位于lib搜索路径(-L标志)中。

相关问题