Почему оптимизация убивает эту функцию?
Недавно в университете мы читали лекцию о специальностях программирования на нескольких языках.
Лектор записал следующую функцию:
inline u64 Swap_64(u64 x)
{
u64 tmp;
(*(u32*)&tmp) = Swap_32(*(((u32*)&x)+1));
(*(((u32*)&tmp)+1)) = Swap_32(*(u32*) &x);
return tmp;
}
Хотя я полностью понимаю, что это также очень плохой стиль с точки зрения читабельности, его главная мысль заключалась в том, что эта часть кода прекрасно работала в производственном коде, пока не был достигнут высокий уровень оптимизации. Тогда код просто ничего не сделает.
Он сказал, что все присвоения переменнойtmp
будет оптимизирован компилятором. Но почему это случилось?
Я понимаю, что существуют обстоятельства, когда переменные должны быть объявленылетучий так что компилятор не трогает их, даже если он думает, что они никогда не читаются и не пишутся, но я не знаю, почему это произошло бы здесь.