0

对不起,通用标题,但我不知道如何更好地澄清。

我正在 MacOS 10.8.3 上编写 C++ 程序。我尝试使用 Apple 的 Instruments 分析是否存在内存泄漏,结果如下

在此处输入图像描述

不幸的是(实际上不知道为什么)调用树没有显示任何条目,所以我无法理解哪个调用导致了泄漏。

但是 Instruments 显示了泄漏内存的地址,所以我打开 gdb 并将其附加到正在运行的进程中,以便分析内存的内容并有一些关于错误的提示。这是 gdb 返回的内容

(gdb) x/s 0x7fa0f3400720
0x7fa0f3400720:  "OS_dispatch_queue_specific_queue"
(gdb) x/s 0x7fa0f34005d0
0x7fa0f34005d0:  "OS_xpc_connection"
(gdb) x/s 0x7fa0f3400640
0x7fa0f3400640:  "OS_dispatch_object"
(gdb) x/s 0x7fa0f3400660
0x7fa0f3400660:  "OS_dispatch_queue"
(gdb) x/s 0x7fa0f3400680
0x7fa0f3400680:  "OS_dispatch_source"
(gdb) x/s 0x7fa0f34006a0
0x7fa0f34006a0:  "OS_dispatch_semaphore"
(gdb) x/s 0x7fa0f34006c0
0x7fa0f34006c0:  "OS_dispatch_group"

等等。显然,我的代码中没有任何这些字符串。

我正在大量使用 pthread 来加快计算速度。这些泄漏可能是由于我使用 pthread 时的一些错误造成的,还是其他原因?实际上让我感到惊讶的是泄漏(相对)很小,而如果我的代码中存在设计错误,我预计会有更大的泄漏(代码运行一段时间,我正在创建和销毁数百个 - 如果不是数千个线程)。

如果有必要,我可以展示我的部分代码(虽然项目不是很大,但肯定太大了,不能在这里发布)。

任何建议表示赞赏。

4

1 回答 1

0

我对仪器了解不多。你可以试试valgrind,它对检测内存泄漏非常有用。

于 2013-05-28T22:24:04.093 回答