【发布时间】:2014-08-03 21:59:31
【问题描述】:
我们都知道堆栈和堆的概念,但我最近读到了第三种保存数据的方法:寄存器。
我很难找到关于这种类型的好文章,我找到的是:http://www.dotnetperls.com/method-parameter,还有很多 C 的东西,例如:http://igoro.com/archive/volatile-keyword-in-c-memory-model-explained/
目前我掌握的唯一真实信息:每个 CPU 都有自己的寄存器,可用于保存数据,以尽可能快的方式访问数据,例如在 for 循环中。
据我所知,这种注册是由 CLR 完成的。然后我想起了这个 volatile-keyword,如果我们看一下 MSDN:
volatile 关键字表示一个字段可能被 同时执行的多个线程。是的字段 声明的 volatile 不受编译器优化的影响 假设由单个线程访问。这确保了最 字段中始终存在最新值。
Volatile 就是这样吗?它告诉CLR不要使用CPU寄存器,而是使用堆栈/堆,所有CPU/线程都可以访问?
很抱歉我的问题令人困惑,但是关于这个主题的信息真的很少。
【问题讨论】:
-
人们过于关注堆和堆栈(有时,就像这里一样,寄存器)。在 99.99% 的情况下,您不太可能需要知道您正在使用的对象的实际存储位置。
-
当你在做某事时,可以把寄存器想象成你大脑的记忆,把堆栈想象成你桌子上需要处理的一堆文件。那么你桌上的那套书籍,你当前正在使用的信息可能被称为缓存,而你的图书馆相当于 DRAM。
标签: c# clr cpu-registers memory-model