Я просматриваю этот фрагмент текста в документации для встроенного _ReadWriteBarrier Visual C++:
В прошлых версиях компилятора Visual C++ функции _ReadWriteBarrier и _WriteBarrier применялись только локально и не влияли на функции выше по дереву вызовов. В Visual C++ 2005 и более поздних версиях эти функции применяются на всем пути вверх по дереву вызовов.
Я понимаю, что барьер делает внутри функции, но «вверх по дереву вызовов», похоже, подразумевает, что функция foo()
, вызывающая функцию bar()
, может знать, содержит ли bar()
барьер или нет. Что на самом деле изменилось в VC2005, чтобы включить это... соглашение о вызовах/ABI, какой-то глобальный анализ, выполненный компилятором, или что?