Переупорядочение компилятора и процессора - PullRequest
3 голосов
/ 09 марта 2011

У меня следующая ситуация.

volatile double val1 = 10.0;
volatile double val2 = 20.0;

double SetValues(double d1, double d2)
{
  double ret = d1-d2;
  InterlockedExchange64( (volatile long long*)&val1, *((long long*)&d1) ); // val1 = d1;
  InterlockedExchange64( (volatile long long*)&val2, *((long long*)&d2) ); // val2 = d2;
  return val1 - va2;
}

Мой вопрос: возможно ли, чтобы процессор или компилятор переупорядочил строки функции SetValues()?

1 Ответ

3 голосов
/ 09 марта 2011

Компилятор никогда не может переупорядочивать вызовы функций во внешних библиотеках. Если ваш компилятор реализует эти функции как встроенные, он будет достаточно умен, чтобы не менять их порядок.

Что касается переупорядочения ЦП, документация MSDN гласит: "Эта функция генерирует полный барьер памяти (или забор), чтобы гарантировать, что операции с памятью выполняются по порядку."

...