编译乱序和执行乱序

编译乱序也就是编译器对访存的执行进行乱序 减少逻辑上不必要的访存 已经尽量提高cache命中率和cpu的load/store单元的工作效率 因此在打开编译器优化以后 看到生成的汇编码并没有严格按照代码的逻辑顺序

怎么解决这个问题 设置编译屏障
barrier();
这样的话就能解决编译乱序所造成的问题

那么你可能会说 volatile也可以实现这个功能啊 其实在编译乱序的问题上 volatile的作用比较弱 它更多的只是避免内存访问行为的合并 也就是volatile会让cpu每次都会去内存取值 并且volatile也具备保护临界资源的作用 linux内核明显不太喜欢volatile

乱序执行也就是在处理器执行时 后发射的指令还是可能先执行完 这就是CPU乱序执行策略 高级的CPU可以根据自己缓存的组织特性 将访问执行重新排序执行
具体的处理可能如下
1.连续地址的访问可能会先执行 因为这样缓存命中率高
2.允许访存的非阻塞 如果前面一条访存命令因为缓存不命中 造成长延时的存储访问 后面的访存指令可以先执行 以便从缓存中取数

为了解决这两种情况 可以使用DMB DSB ISB这三个指令 自旋锁互斥锁的获得锁 解锁操作都是要使用这几个执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值