博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
__asm__ __volatile__("": : :"memory")
阅读量:5073 次
发布时间:2019-06-12

本文共 833 字,大约阅读时间需要 2 分钟。

memory 强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers和cache中已缓存的内存单元中的数据将作废。cpu将不得不在需要的时候重新读取内存中的数据。这就阻止了cpu又将registers,cache中的数据用于去优化指令,而避免去访问内存。

    The GCC manual says using 'asm volatile' prevents the asm instruction from being 'movedsignificantly' and adding 'memory' to the clobber list prevents GCC from keeping memory values cached in registers across the assembler instruction, but also says 'GCC will perform some optimizations across a volatile asm instruction' but doesn't explain what.

   

1)   __asm__用于指示编译器在此插入汇编语句。

2)  
__volatile__用于告诉编译器,严禁将此处的汇编语句与其它的语句重组合优化。即:原原本本按原来的样子处理这这里的汇编。
3) 
 
memory强制gcc编译器假设RAM所有内存单元均被汇编指令修改,这样cpu中的registers和cache中已缓存的内存单元中的数据将作废。cpu将不得不在需要的时候重新读取内存中的数据。这就阻止了cpu又将registers,cache中的数据用于去优化指令,而避免去访问内存。
4) 
  "":::表示这是个空指令。barrier()不用在此插入一条串行化汇编指令。

转载于:https://www.cnblogs.com/LoongEmbedded/p/5298298.html

你可能感兴趣的文章
限定 edittext 的 输入内容
查看>>
1002 A + B Problem II
查看>>
STL算法
查看>>
time series review
查看>>
获取iframe中的元素
查看>>
.NetCore下使用Prometheus实现系统监控和警报 (四)客户端代码处理
查看>>
安卓系统广播暴露设备信息-Android System Broadcasts Expose Device Information
查看>>
【文文殿下】扩展中国剩余定理(板子)
查看>>
可视化角谷猜想
查看>>
关于undefined reference to `WSASocketA@24'问题的解决
查看>>
android开发中难免遇到listview刷新数据出现异常
查看>>
splay tree
查看>>
深入理解java虚拟机读书笔记1--java内存区域
查看>>
找到了一个鬼畜扫雷
查看>>
【转载】计算机程序的思维逻辑 (82) - 理解ThreadLocal
查看>>
UML几种图的绘制
查看>>
Django中文无法转换成latin-1编码的解决方案
查看>>
P1378 油滴扩展 dfs回溯法
查看>>
DropDownList 获取不了选择的值 这种错误
查看>>
上周热点回顾(8.12-8.18)
查看>>