Поскольку вы используете GCC и говорите, что создание переменной volatile
не работает, вы можете заставить оптимизатор думать, что цикл изменяет переменную, лгая компилятору:
while(global)
asm volatile("" : "+g"(global));
Это встроенный оператор сборки, который говорит, что он изменяет переменную (он передается как операнд ввода-вывода).Но он пуст, поэтому очевидно, что он ничего не делает во время выполнения.Тем не менее, оптимизатор считает, что он изменяет переменную - так сказали программисты, а компилятор, за исключением подстановки операндов (что означает простую замену одного текста другим), на самом деле не заботится о теле встроенной сборки и не выполняет никаких действий.забавные вещи к нему.
И поскольку тело пустое и ограничение использовало его как наиболее доступное из доступных, оно должно надежно работать на всех платформах, где GCC поддерживает встроенную сборку.