Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40917
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 17:39
文章分类
文章存档

2015年(31)

我的朋友

分类: C/C++

2015-10-28 22:52:39

1.程序运行时,需要的数据可能要经过寄存器,cache,缓冲区,主存,
TLB,MMU等转换或读取出来。为提高速度,cpu首先使用过的是载入
到cpu内置单元的寄存器页数据,可能这时外部或者其他存放地方的这
个数据已经改变。

2.编译器的优化掉相关的代码,

volatile的目的:告诉编译器,每次都要从内存中真正读取。

使用的地方:
1.多线程中被几个任务共享的变量
2.并行的硬件寄存器变量
3.中断服务子程序访问到的非自动变量

在C中内存屏障的实现:
  #define mb() __asm__ __volatile__ ("" : : : "memory")
  #define set_mb(var, value) do { var = value; mb(); } while (0)

串行化指令:迫使处理器在下一条指令执行前完成所有先前的指令对标志,
寄存器及存储器的修改,并将缓存的写入到主存中。
阅读(580) | 评论(0) | 转发(0) |
0

上一篇:队列使用--树的层次遍历

下一篇:大小端

给主人留下些什么吧!~~