硬件供应商报告了一个理论上的(不确定的,难以测试的,实际上从未发生过)硬件问题,其中对特定内存范围的双字写入可能会 destruct 任何future 的总线传输.
虽然我没有在C代码中显式地编写任何双字代码,但我担心编译器(在当前或将来的实现中)会被允许将多个相邻的单词赋值合并成单个双字赋值.
编译器不允许对挥发物的赋值进行重新排序,但(对我来说)不清楚合并是否算作重新排序.我的直觉是这样的,但我以前被语言律师纠正过!
例子:
typedef struct
{
volatile unsigned reg0;
volatile unsigned reg1;
} Module;
volatile Module* module = (volatile Module*)0xFF000000u;
// two word stores, or one double-word store?
module->reg0 = 1;
module->reg1 = 2;
(我会单独询问我的编译器供应商,但我很好奇该标准的规范/社区解释是什么.)