У меня проблема, когда оптимизатор, кажется, удаляет строки кода, которые совершенно необходимы. Немного предыстории: у меня есть программа, которая взаимодействует с драйвером PCIe. У меня есть целочисленный указатель UINT32 *bar_reg;
, который указывает на адрес пользовательского пространства регистра BAR, с которым я общаюсь. Чтобы записать в регистр, я просто разыменовываю указатель. *(bar_reg + OFFSET) = value;
Без оптимизаций работает нормально. Однако, как только я включаю любой уровень оптимизации, все строки, которые ссылаются на указатель, удаляются. В конце концов я обнаружил это, пройдя через Visual Studio. Однако это происходит независимо от платформы. До сих пор мне удавалось обходиться отключенным оптимизатором, но кто-то, использующий код моей библиотеки в Linux, хочет включить оптимизацию прямо сейчас. Поэтому мне любопытно, почему возникает эта проблема и какое наиболее разумное решение/обходной путь.