补充一点:
arm架构实现的是weakly memory model,针对 指令执行,比如load, store,和计算的指令的顺序不能得到保证,所以需要dmb,dsb和isb的barrier指令来保证一些有需求的场景, 这些barrier是双向的,对性能有影响,又加入一些单向的barrier, 比如load acquire和store release, 这样和高层语言比如C++,Java的memory model有个对应。
回到CPU的out of order, 我的理解是从fetch, decode,然后到issue这个阶段还是in order的,后面register renaming, execution是可以乱序的。比如arm A15, A17; 但是对于A7这样in order的CPU, 代码执行的顺序是in order,但是完成retire的时间可能不一样,有时也需要考虑。
【 在 chenpp 的大作中提到: 】
:指令集和乱序执行是两个范畴的。能不能乱序取决于具体支持v7a的核心能不能乱序。v7a不严格要求具体的CPU实现是否能够乱序。
:【 在 wjhtingerx () 的大作中提到: 】
:...................