12

我的应用程序打印了几行,例如:

tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @  0x727432 0x727302 0x727a58    0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a
tcmalloc: large alloc 4294488064 bytes == 0x2c97063000 @  0x727432 0x727302 0x727a58   0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a
tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @  0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a

这个消息是从哪里来的?这是否意味着我的应用程序有一些错误或内存泄漏?如何追查根本原因?

4

2 回答 2

11

请参阅http://code.google.com/p/gperftools/source/browse/trunk/src/tcmalloc.cc?r=80&redir=1第 843 行

根据您的应用程序 - 大分配可能是也可能不是错误。

在任何情况下 - @ 标记之后的部分是堆栈跟踪,可用于定位消息的来源

重复数字(4294488064 似乎等于 4G-479232 或 0x100000000-0x75000)让我怀疑原始分配调用得到了一个负符号值并将其用作无符号值。

于 2012-01-31T09:59:59.907 回答
1

如果您仍在运行该进程或能够对其进行核心转储(kill -ABRT),那么您应该能够附加gdb并运行该info symbol <address>命令(是错误消息中的<address>十六进制数字之一:)。@0x727432 ...

就我而言,这是一个真正的错误。

于 2014-03-18T19:36:15.060 回答