Tag: 记忆障碍

可以在ARM Cortex M4中安全地省略DMB指令

我正在浏览GCC为ARM Cortex M4生成的程序集,并注意到atomic_compare_exchange_weak在条件周围插入了两条DMB指令(使用-std=gnu11 -O2编译为GCC 4.9): // if (atomic_compare_exchange_weak(&address, &x, y)) dmb sy ldrex r0, [r3] cmp r0, r2 itt eq strexeq lr, r1, [r3] cmpeq.w lr, #0 dmb sy bne.n … 由于ARM Cortex M4屏障指令的编程指南声明: 在图41和图42的示例中省略DMB或DSB指令不会导致任何错误,因为Cortex-M处理器: 不要重新排序内存传输 不允许两个写传输重叠。 在针对Cortex M时,是否有任何理由无法删除这些指令?