我正在为Cortex M0(ARM)CPU编写代码,32位读/写是原子的。现在我想知道当我读/写8位/ 16位变量时,它们是否也保证是原子的?我的直觉是肯定的,因为它们在内部与32位部分对齐,因此CPU不可能需要两个单独的指令来读/写它们。
但是我也碰巧在打包结构中存储了很多变量以节省内存,并且有可能变量没有在32位边界上对齐,所以16位值的每一半都可能在不同的部分
当我使用压缩结构时,我失去原子操作是真的吗?
答案 0 :(得分:2)
使用压缩结构,您永远不会对与内存单元边界重叠的字段进行读/写原子操作。这意味着只保证8位操作是原子的,否则它取决于字段的内存对齐。