1

我使用 apt-get install libtcmalloc-minimal4 在 Ubuntu 14.0 上安装了 tcmalloc

我做了以下步骤:

ln -s libtcmalloc_minimal.so.4.1.2 libtcmalloc_minimal.so
将我的可执行文件与 -ltcmalloc_minimal 链接

运行代码后,我看不到任何性能差异。

我尝试使用 HEAPCHECK 运行以检查是否正在使用 tcmalloc,但没有发现任何与 HEAPCHECK 相关的警告。

我的程序包含 malloc 调用和 openMP。还有什么我需要做的吗?如何检查以确保我的程序正在使用 tcmalloc?

4

3 回答 3

2

我做了以下步骤: ln -s libtcmalloc_minimal.so.4.1.2 libtcmalloc_minimal.so 将我的可执行文件与-ltcmalloc_minimal

一般来说,永远不需要对这样的库进行符号链接。您必须这样做的事实告诉我您没有安装正确的(开发)包。

ldd给出“不是动态可执行文件”。

在这种情况下,保证您的可执行文件没有与libtcmalloc_minimal.so.

我已经使用链接库-L <path to .so>

这不会您的可执行文件链接到任何特定的库,它只是告诉您的链接器在<path to .so>目录中查找库。您实际上需要让链接器查找libtcmalloc_minimal带有-ltcmalloc_minimal标志的 , 。

于 2015-10-14T03:11:39.720 回答
1

您可以在 malloc() 处设置断点,例如在 GDB 中:

(gdb) break malloc
Breakpoint 2 at 0x7ffff72b2130 (3 locations)

如果正在使用 TC-Malloc,则在进行动态分配时您将看到以下内容:

Breakpoint 2, 0x00007ffff7ba8c20 in tc_malloc () from  /lib64/libtcmalloc_minimal.so.4
(gdb) bt
#0  0x00007ffff7ba8c20 in tc_malloc () from /lib64/libtcmalloc_minimal.so.4
#1  0x00007ffff729e45d in __fopen_internal () from /lib64/libc.so.6
于 2016-12-28T13:33:49.883 回答
1

从 google-perftool 组得到以下响应,以检查我的程序是否正在使用 tcmalloc:

将环境变量 MALLOCSTATS 设置为 1 或 2 应该在最后打印一些 tcmalloc 统计信息。

例如 MALLOCSTATS=2 ./myprogram

于 2015-10-13T05:26:13.513 回答