Барьеры памяти компилятора, помимо прочего, заставляют компилятор следить за тем, чтобы все переменные стека, которые кэшируются в регистры, записывались в память перед барьером.
Например, в GCC есть следующий оператор:
asm inline ("" : : : "memory");
Есть ли способ указать компилятору (в частности, GCC, но меня также интересуют другие), чтобы он выполнял тот же эффект только для конкретного переменная? что-то вроде следующей воображаемой конструкции:
int x;
...
asm inline ("" : : : "memory(x)");
С ожидаемым поведением, что значение x и x будет записано только в соответствующую ячейку памяти, если оно будет кэшировано в регистре.
Причина в том, что у меня есть конкретная переменная, которую мне нужно убедиться, что она не кэширована в регистре, чтобы аппаратный механизм мог прочитать ее значение. Однако полный барьер памяти компилятора заставит компилятор записать в память значение всех других переменных, которые могут быть кэшированы в регистре в этот момент времени, что может составлять гораздо больше данных, чем мне нужно. написать. Интересно, есть ли что-то более конкретное.
Заранее спасибо!