我有一个 C++ 程序,它在 OSX 10.8.2 上比在 Linux 上慢得多。分析表明,原因是对 free 的调用(由 STL 操作,FWIW 产生)在 OSX 上要慢得多,因为它们会调用 madvise,并且在那里消耗实时。
有没有办法调节 OS/X 的这种行为?
我有一个 C++ 程序,它在 OSX 10.8.2 上比在 Linux 上慢得多。分析表明,原因是对 free 的调用(由 STL 操作,FWIW 产生)在 OSX 上要慢得多,因为它们会调用 madvise,并且在那里消耗实时。
有没有办法调节 OS/X 的这种行为?
嗯,是!
我在 Linux 中使用 malloc/free 时遇到了可怕的性能问题,并开始寻找替代品。想到了两个选项tbbmalloc(英特尔 TBB 的一部分,是免费的顺便说一句)和 Google malloc。经过广泛的测试,尚不清楚哪个更快(两者中的),但两者都比 LIBC 的实施快得多。
我选择了 tbbmalloc,因为它工作更顺畅,google malloc 有一个错误导致虚拟内存非常大(保留但未提交),这对我的应用程序非常不利(IT 守护进程会杀死它)。
好的:
坏处:
我开发的应用程序是一个 CAD 应用程序,它使用了 10 多个 GB,构建和破坏了数以百万计的各种结构(大量 STL 映射、向量、hash_maps)。
这个怎么做:
在链接器命令中,添加-ltbbmalloc
并确保库位于 lib 搜索路径(-L
标志)中。