在最近的几天中,我获得了除标准以外的有关内存分配器的一些信息malloc()。有些实现似乎比malloc()带有多个线程的应用程序要好得多。例如似乎tcmalloc并ptmalloc具有更好的性能。
malloc()
tcmalloc
ptmalloc
我有一个在许多地方都使用malloc和new运算符的C 应用程序。我认为用类似的东西代替它们ptmalloc可能会改善其性能。但是我想知道new当在Linux上运行的C 应用程序中使用该运算符时会如何操作?它是否使用malloc或其他标准行为?
malloc
new
new用代码中的旧分配器替换内存分配器的最佳方法是什么?是否有任何方法可以覆盖该行为,或者new,malloc或者是否需要一一替换所有对它们的调用?
从TCMalloc文档中:
要使用TCmalloc,只需通过“ -ltcmalloc”链接器标志将tcmalloc链接到您的应用程序中。您可以通过使用LD_PRELOAD在未编译的应用程序中使用tcmalloc: $ LD_PRELOAD =“ / usr / lib / libtcmalloc.so”
要使用TCmalloc,只需通过“ -ltcmalloc”链接器标志将tcmalloc链接到您的应用程序中。您可以通过使用LD_PRELOAD在未编译的应用程序中使用tcmalloc:
$ LD_PRELOAD =“ / usr / lib / libtcmalloc.so”
ptmalloc似乎很相似(但是,如果您使用的是Linux,则可能已经在使用它,因为它是GNU C库的一部分)。
我希望operator new打个电话malloc,但是您可以通过在上设置一个断点malloc然后再打个电话来轻松地检查一下自己new。如果您new没有打电话malloc,您可以重新定义它以便打电话。
operator new