具有一定的位域结构。比方说
struct _example{
unsigned f10:1;
unsigned f11:1;
unsigned f2:2;
unsigned f4:4;
unsigned f8:8;
unsigned f16:16;
};
当以 a10|=1 的形式访问 f10 时,代码是orb $1,(%rcx),但是orl $1,(%rcx). 例如,%rcx 寄存器包含结构开头的地址。
您可以将相应的变量声明为 volatile,但此解决方案适用于第一个字段。
仔细想想,编译器无法确定结构中 32 位字的边界,所以它指的是字节。https://gcc.godbolt.org/z/17JQWM
不可能。编译器无法计算 32 位边界。