3

我正在为 Cortex M0 (ARM) CPU 编写代码,并且 32 位读/写是原子的。现在我想知道当我读/写 8bit/16bit 变量时,它们是否也保证是原子的?我的直觉说是的,因为它们在内部与 32 位部分对齐,所以 CPU 不可能需要两条单独的指令来读/写它们。

但是我也碰巧在打包结构中存储了很多变量以节省内存,并且变量可能未在 32 位边界上对齐,因此 16 位值的每一半可能位于不同的部分中。

那么,当我使用打包结构时,我是否会丢失原子操作?

4

1 回答 1

2

使用打包结构,您将永远不会对与内存单元边界重叠的字段进行读/写原子操作。这意味着只有 8 位操作保证是原子的,否则它取决于你的字段的内存对齐方式。

于 2013-02-02T13:33:54.937 回答