3

Cortex M0 (ARM) CPU 用のコードを書いていますが、32 ビットの読み取り/書き込みはアトミックです。8bit/16bit 変数をいつ読み書きするのか疑問に思っていましたが、それらもアトミックであることが保証されていますか? 私の本能的にはそうです。これらは内部で 32 ビット セクションにアラインされているため、CPU がそれらを読み書きするために 2 つの別々の命令を必要とする可能性はありません。

しかし、メモリを節約するために多くの変数をパックされた構造体に保存することもあり、変数が 32 ビット境界に整列されていない可能性があるため、16 ビット値の各半分が異なるセクションにある可能性があります。

では、パック構造を使用するとアトミック操作が失われるというのは本当ですか?

4

1 に答える 1

2

パックされた構造体を使用すると、メモリ ユニットの境界と重複するフィールドに対して読み取り/書き込みアトミック操作が発生することはありません。これは、8 ビット操作のみがアトミックであることが保証されていることを意味します。それ以外の場合は、フィールドのメモリ アラインメントに依存します。

于 2013-02-02T13:33:54.937 に答える