对于通用标题感到抱歉,但我不知道如何更好地澄清。
我正在MacOS 10.8.3上编写一个C ++程序。我尝试使用Apple的仪器分析是否存在内存泄漏,这是结果
不幸的是(实际上不知道为什么)Call Tree没有显示任何条目,所以我无法理解哪个调用会导致泄漏。
但是,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来加速计算。可能这些泄漏是由于我使用pthreads时出现的一些错误造成的,或者其他原因是什么?实际上让我感到惊讶的是泄漏是(相对)小的,而如果我的代码中存在设计错误,我会期待更大的泄漏(代码运行一段时间,我正在创建并销毁数百个 - 如果不是成千上万的线程。
如果有必要,我可以显示我的部分代码(虽然项目不是很大,但在这里发布它肯定太大了。)
任何建议都表示赞赏。