Mam problem z tym, że optymalizator wydaje się usuwać linie kodu, które są niezbędne. Niektóre tła: Mam program, który łączy ze sobą sterownik PCIe. Mam wskaźnik liczbowy UINT32 *bar_reg;
, który wskazuje na adres przestrzeni użytkownika rejestru BAR, z którym się komunikuję. Aby napisać do rejestru, po prostu odwołuję się do wskaźnika. *(bar_reg + OFFSET) = value;
Optymalizator usuwania linii odwijających wskaźnik
Bez optymalizacji działa to dobrze. Jednak zaraz po włączeniu dowolnego poziomu optymalizacji usuwane są wszystkie linie, które odwołują się do wskaźnika. Sposób, w jaki to odkryłem, polegał na przejściu przez Visual Studio. Jednak zdarza się to niezależnie od platformy. Do tej pory udało mi się uzyskać optymalizację, ale ktoś, kto używa mojego kodu bibliotecznego w Linuksie, chce teraz włączyć optymalizację. Więc jestem ciekawy, dlaczego ten problem występuje i jaka jest najrozsądniejsza naprawa/obejście problemu.
Zoptymalizowany kod zachowuje się inaczej, zwykle ze względu na niezdefiniowane zachowanie. –