понедельник, 2 июля 2012 г.

Пару слов о valgrind

Все круто.

valgrind что-то ругался, писал про кусок кода, где сортировка с компаратором, что тут типа неопределенный jmp в неинициализированной памяти. Подумал, что у них там в stl что-то криво, вот и ругается. У меня ведь тесты идут.

Проверяю на linux (не все же под маком тестить). И оба-на, тест зависает. Полчаса копал, оказалось неспроста valgrind ругается. И в самом деле после new int[] стоит как-то туда записать. для определенности.

Только valgrind промахнулся со строчкой кода. Темплейты таки нагенерили такого, что он немного промахнулся.

Там все говорят о бинарной трансляции, что для меня это всего лишь словосочетание из двух слов. По смыслу это своя ВМ и они могут мониторить всю память и подменить/обернуть все низкоуровневые вызовы и доступы к памяти. Типа, за счет этого все круто.

[update 02.07.2012] Почесав голову... Да и ругался он поди правильно. Он же по нативному коду смотрит. Там не совсем stl, там это называется "перегруженный оператор () с двумя int-ами". А как эта штука внутри компилируется одному gcc известно.

Еще вопрос, почему под маком это все работало? Версия про то, что компилятор как бы при выделении памяти принудительно пишет 0  не пройдет, иначе бы valgring не ругался бы. То есть он выделяет память из уже 0. Странно как-то, везение? Скорее неуд, на неделю раньше бы наступил.

Комментариев нет: