Могут ли переменные внутри упакованных структур быть прочитаны атомарно?
Я пишу код для процессора Cortex M0 (ARM), а 32-разрядные операции чтения / записи являются атомарными. Теперь мне было интересно, когда я читаю / записываю 8-битные /16-битные переменные, они также гарантированно являются атомарными? Мой инстинкт говорит да, потому что они внутренне выровнены по 32-битным разделам, поэтому нет никакой возможности, что ЦП нужны две отдельные инструкции для их чтения / записи.
Но я также храню множество переменных в упакованных структурах для экономии памяти, и там возможно, что переменные не выровнены по 32-битным границам, поэтому каждая половина 16-битного значения может находиться в отдельном разделе.
Так правда ли, что я теряю атомарные операции, когда использую упакованные структуры?
1 ответ
Используя упакованные структуры, вы никогда не будете выполнять элементарные операции чтения / записи над полями, которые перекрывают границу блока памяти. Это означает, что только 8-битные операции гарантированно будут атомарными, в противном случае это зависит от выравнивания памяти ваших полей.