Существует ли барьер памяти компилятора для одной переменной?

Барьеры памяти компилятора, помимо прочего, заставляют компилятор следить за тем, чтобы все переменные стека, которые кэшируются в регистры, записывались в память перед барьером.

Например, в GCC есть следующий оператор:

asm inline ("" : : : "memory");

Есть ли способ указать компилятору (в частности, GCC, но меня также интересуют другие), чтобы он выполнял тот же эффект только для конкретного переменная? что-то вроде следующей воображаемой конструкции:

int x;
...
asm inline ("" : : : "memory(x)");

С ожидаемым поведением, что значение x и x будет записано только в соответствующую ячейку памяти, если оно будет кэшировано в регистре.

Причина в том, что у меня есть конкретная переменная, которую мне нужно убедиться, что она не кэширована в регистре, чтобы аппаратный механизм мог прочитать ее значение. Однако полный барьер памяти компилятора заставит компилятор записать в память значение всех других переменных, которые могут быть кэшированы в регистре в этот момент времени, что может составлять гораздо больше данных, чем мне нужно. написать. Интересно, есть ли что-то более конкретное.

Заранее спасибо!

9
задан gby 17 January 2012 в 14:15
поделиться