对象引用的使用在CIL中受到严格限制。它们几乎完全被使用带有VOS(Virtual Object System)指令,这些指令是专门为处理对象和部分对象引用而设计的。

常规操作如下

首先我们需要将加载一个本地变量到计算堆栈(Evaluation Stack)里(此处需要说明一下。Evaluation Stack这个术语我没有找到前人的中文翻译,此处是我本人的机翻。对于计算堆栈的作用,我的理解大致如下:我们常说的堆栈中的变量并不能直接访问,而在CLR中需要访问这些变量就必须通过load指令将变量从内存里移动到计算堆栈里进行处理。而计算堆栈在其中起到的角色就是连接程序和内存的中介。)此时需要使用ldloc指令将局部变量加载到堆栈中,或者使用ldarg指令将参数加载到堆栈中。然后使用stloc指令从计算堆栈的顶部抛出当前值并将它存储到指定索引处的局部变量列表中,或者使用Starg指令将位于计算堆栈顶部的值存储在参数槽中的指定索引处。

移动到计算堆栈,而在将变量移动到计算堆栈中之前,CIL会使用beq指令将引用与变量进行比较,比较通过后将它推送到计算堆栈。

使用ldind.ref指令将变量加载到计算堆栈,再使用stind.ref指令并将对象引用的数值存储在对象引用的地址中。

使用ldnull指令创建为空引用,通过ret指令将值返回。

最新文章

  1. 转载:Solr的自动完成实现方式(第三部分:Suggester方式续)
  2. Jquery ui autocomplete简单api
  3. iOS问题处理:如何在Mac下显示Finder中的所有文件
  4. UIViewAnimationOptions swift 2
  5. Hadoop实战课程
  6. union与struct以及大小端
  7. EL表达式对数组、集合操作
  8. DataList嵌套绑定例子
  9. ubuntu 下配置Web服务器
  10. Java实现缓存(LRU,FIFO)
  11. 对象级别锁 vs 类级别锁 – Java
  12. [ Java面试题 ]数据库篇
  13. [十六]JavaIO之InputStreamReader 与 OutputStreamWriter
  14. UVA11922 Permutation Transformer
  15. python 2解决编码问题
  16. phpize是什么
  17. myEclips 中的项目复制重命名
  18. 设置Jmeter默认为中文, 就是这么简单!
  19. python入门-字典
  20. 智能合约调用另一合约中的payable方法

热门文章

  1. ArcGIS for Android 实现加载地图
  2. Angular ngx-translate 国际化实践(中文转英文)
  3. label 与input其中input的 id与name
  4. 3. 贪心思想(todo)
  5. curl命令查用操作
  6. C# 游戏雏形 人物地图双重移动
  7. 40.Ribbon和Feign
  8. 面向对象程序设计第二次blog
  9. shell脚本程序的撰写
  10. flannel 关闭SNAT