У меня есть сложная структура (к сожалению, я не могу переписать ее, отсюда и мой вопрос), которую я написал для собственного использования, и она предполагает интенсивное использование массивов с плавающей точкой.
Эти массивы с плавающей точкой передаются как const float*
между многими функциями и объектами.
Однако мне нужно выполнить специальную процедуру отладки ("проверку градиента" для нейронных сетей) в спецификациях. c областей моего кода. Это позволяет мне видеть, приведет ли ручное возмущение моих записей массива к ожидаемому изменению значения позже, в другом месте. Если нет, то я допустил ошибку в промежуточных формулах.
Я написал инструмент, который принимает массив const и возмущает некоторые его значения.
В результате, во время этой процедуры временной отладки я приведу эти const float*
к float*
, используя переинтерпретацию. Это ужасно и ведет к неопределенному поведению. Я изменяю значения внутри константных массивов и молюсь, чтобы они не ломались при запуске этой отладочной версии (это не половина времени).
Вопрос:
Можно ли временно запретить компилятору оптимизировать код везде, где он видит const float*
, просто чтобы дать мне возможность отладить мой код с помощью моего инструмента проверки?
Другими словами, чтобы я мог безопасно привести const float*
к float*
на данный момент.
Есть ли какой-нибудь #define, который я мог бы использовать в своем коде или флаге компилятора для Visual Studio?
Я использую c ++ 17 и Visual Studio
Редактировать после принятия ответа
На этот раз проблема не была в гипсе, но во что-то перезаписывает память вне массива. С помощью точки останова Memory Watch в Visual Studio и стека вызовов я смог отследить место, где это происходило