XCode не показывает утечки в программе C ++

Я написал следующий фрагмент кода как инструмент командной строки xcode на c ++

int * num = new int[100];

num[4] = 5;
num = NULL;

cout << "leaked" << endl;

string c; cin >> c;

return 0;

Однако при профилировании с использованием инструментов с шаблоном Leaks он не показывает никаких утечек памяти, хотя он явно должен быть, пока он ожидает ввода.
введите описание изображения здесь

0

Решение

Когда вы компилируете для профилирования, компилятор выполняет оптимизацию. Одна из этих оптимизаций — оптимизация мертвого хранилища:

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?

Все распределение было оптимизировано, потому что компилятор нашел способ получить тот же результат, ничего не выделяя. Компиляторы потрясающие, не так ли?

3

Другие решения


По вопросам рекламы [email protected]