C11禁止这种行为(显然是一种凭空而存)吗?

这个行为是否被C11禁止了
LWN article “Betrayed by a bitfield”?假设spinlock_t是一个引用结构的类型,它只能通过其成员上的C11原子基元访问(实际上它使用Linux(内核)内存屏障,但是假设它不是因为它不是未定义的,因为它使用特定于实现的接口).除了标题中的问题,它是一个“凭空”的例子吗?

提前致谢.

最佳答案 不,因为它在这里呈现它在C11中是不被禁止的. C11仅为_Atomic类型提供原子性保证,即在语言中声明为原子的类型.由于内核使用自己的本土原语来确保你自己的原子性,C11在这里无法帮助你.

与本土汇编程序黑客相比,C11 _Atomic更改的是_Atomic可能会更改数据类型的大小和对齐属性.在给定的示例中,它可以例如强制在下一个字边界的边缘上的尾随位字段.

点赞