XCode没有显示C ++程序中的泄漏

时间:2014-06-10 23:31:09

标签: c++ xcode memory-leaks instruments xcode-instruments

我在c ++

中将以下代码编写为xcode命令行工具
int * num = new int[100];

num[4] = 5;
num = NULL;

cout << "leaked" << endl;

string c; cin >> c;

return 0;

但是,当使用带有Leaks模板的Instruments进行性能分析时,它不会显示任何内存泄漏,尽管在等待输入时应该有一个明显的内存泄漏。 enter image description here

1 个答案:

答案 0 :(得分:3)

编译以进行性能分析时,编译器会进行优化。其中一个优化是死区优化:

num = NULL; // The optimizer deleted this operation

通常,如果num实际上等于NULL,你为什么要关心?由于您从未读过num的值,因此您无法知道编译器是否实际存储NULL而不查看汇编输出。因此,编译器并没有真正将NULL写入该位置。

但等等,还有

我做了一个测试:

#include <unistd.h>
int main()
{
    int *num = new int[100];
    num[4] = 5;
    num = NULL;
    sleep(1);
    return 0;
}

集会(为简洁而省略了序言和结语):

movl    $1, %edi
callq   _sleep
xorl    %eax, %eax

等待一分钟,new int[100]num[4] = 5发生了什么?

整个分配已经过优化,因为编译器想出了一种在不分配任何东西的情况下获得相同结果的方法。编译器很棒,不是吗?