一尘不染

在现有代码中替换新的内存分配器的最佳解决方案是什么?

linux

在最近的几天中,我获得了除标准以外的有关内存分配器的一些信息malloc()。有些实现似乎比malloc()带有多个线程的应用程序要好得多。例如似乎tcmallocptmalloc具有更好的性能。

我有一个在许多地方都使用mallocnew运算符的C
应用程序。我认为用类似的东西代替它们ptmalloc可能会改善其性能。但是我想知道new当在Linux上运行的C
应用程序中使用该运算符时会如何操作?它是否使用malloc或其他标准行为?

new用代码中的旧分配器替换内存分配器的最佳方法是什么?是否有任何方法可以覆盖该行为,或者newmalloc或者是否需要一一替换所有对它们的调用?


阅读 340

收藏
2020-06-07

共1个答案

一尘不染

TCMalloc文档中

要使用TCmalloc,只需通过“
-ltcmalloc”链接器标志将tcmalloc链接到您的应用程序中。您可以通过使用LD_PRELOAD在未编译的应用程序中使用tcmalloc:

$ LD_PRELOAD =“ / usr / lib / libtcmalloc.so”

ptmalloc似乎很相似(但是,如果您使用的是Linux,则可能已经在使用它,因为它是GNU
C库的一部分
)。

我希望operator new打个电话malloc,但是您可以通过在上设置一个断点malloc然后再打个电话来轻松地检查一下自己new。如果您new没有打电话malloc您可以重新定义它以便打电话。

2020-06-07