CIL指令和指针类型的操作
对象引用的使用在CIL中受到严格限制。它们几乎完全被使用带有VOS(Virtual Object System)指令,这些指令是专门为处理对象和部分对象引用而设计的。
常规操作如下:
首先我们需要将加载一个本地变量到计算堆栈(Evaluation Stack)里(此处需要说明一下。Evaluation Stack这个术语我没有找到前人的中文翻译,此处是我本人的机翻。对于计算堆栈的作用,我的理解大致如下:我们常说的堆栈中的变量并不能直接访问,而在CLR中需要访问这些变量就必须通过load指令将变量从内存里移动到计算堆栈里进行处理。而计算堆栈在其中起到的角色就是连接程序和内存的中介。)此时需要使用ldloc指令将局部变量加载到堆栈中,或者使用ldarg指令将参数加载到堆栈中。然后使用stloc指令从计算堆栈的顶部抛出当前值并将它存储到指定索引处的局部变量列表中,或者使用Starg指令将位于计算堆栈顶部的值存储在参数槽中的指定索引处。
移动到计算堆栈,而在将变量移动到计算堆栈中之前,CIL会使用beq指令将引用与变量进行比较,比较通过后将它推送到计算堆栈。
使用ldind.ref指令将变量加载到计算堆栈,再使用stind.ref指令并将对象引用的数值存储在对象引用的地址中。
使用ldnull指令创建为空引用,通过ret指令将值返回。
CIL指令和指针类型的操作的更多相关文章
- C语言指针类型
1:只要是指针类型,不管是几级指针[带几个*],其宽度都是4字节 2:任何数据类型[包括自己定义的结构体]前面都能加*号,表示该数据类型的一个指针 3:由于是386处理器,其数据处理的宽度都是四个字节 ...
- 《精通C#》自定义类型转化-扩展方法-匿名类型-指针类型(11.3-11.6)
1.类型转化在C#中有很多,常用的是int类型转string等,这些都有微软给我们定义好的,我们需要的时候直接调用就是了,这是值类型中的转化,有时候我们还会需要类类型(包括结构struct)的转化,还 ...
- sql 里 text类型的操作(转载)
SQL Server中TEXT类型字段值在数据库中追加字符串方法 对text类型字段值进行追加更新的操作,一开始用了简单的update语句试了试,有错误,原来text.ntext类型的字段不能和 va ...
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
- (七)C语言中的void 和void 指针类型
许多初学者对C中的void 和void 的指针类型不是很了解.因此常常在使用上出现一些错误,本文将告诉大家关于void 和void 指针类型的使用方法及技巧. 1.首先,我们来说说void 的含义: ...
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- C语言中file文件指针概念及其操作 (转载)
文件 文件的基本概念 所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件. ...
- C语言的通用指针类型(void *)
reference: https://blog.csdn.net/cumirror/article/details/4631701 https://blog.csdn.net/Lee_Shuai/ar ...
- go 指针类型
变量和内存地址 每个变量都有内存地址,可以说通过变量来操作对应大小的内存 var a int32 a = fmt.Printf(“%d\n”, a) fmt.Printf(“%p\n”, &a ...
- C++类指针类型的成员变量的浅复制与深复制
本篇文章旨在阐述C++类的构造,拷贝构造,析构机制,以及指针成员变量指针悬空问题的解决.需要读者有较好的C++基础,熟悉引用,const的相关知识. 引言: 类作为C++语言的一种数据类型,是对C语言 ...
随机推荐
- SPA路由实现的基本原理
1. SPA路由实现的基本原理 前端单页应用实现路由的策略有两种,分别是 基于hash 和 基于 History API 基于hash 通过将一个 URL path 用 # Hash 符号拆分.- 浏 ...
- LeetCode 周赛 334,在算法的世界里反复横跳
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 今天是 LeetCode 第 334 场周赛,你参加了吗?这场周赛考察范围比较基础,整体 ...
- ABP微服务系列学习-使用Tye启动微服务
Tye是微软开源的一款开发人员工具, 能够用于简化微服务以及分布式应用程序的开发.测试以及部署过程.Tye 的首要目标是简化微服务的开发,具体方式包括仅用一行命令执行多项服务.在容器中使用依赖项目,以 ...
- js 获取和回填form表格数据
//将form里面的内容序列化成json数据 $.fn.serializeJson = function (otherString) { var serializeObj = {}, array = ...
- nginx部署+将安装包打包到requirements.txt文件中
pip freeze > requirements.txt 将在虚拟环境中安装的包记录到requirements.txt里 详解见https://www.jianshu.com/p/dba8 ...
- vue3 使用watch 监听多个数据
// 监听时间选择 watch( [ internalSubmTimer, internalTimer, externalSubmTimer, externaTimer, callbackTimer, ...
- HttpClient 提交 JSON数据
常见数据格式 application/x-www-form-urlencoded 这也是最常见的 POST 提交数据的方式,一般是用来提交表单. multipart/form-data 上传文件时通常 ...
- codeforce A. Many Equal Substrings
http://codeforces.com/contest/1029/problem/A 嗳,简单的题做起来是真的舒服qwq 1 public static void main(String[] ar ...
- HTTP知识点
HTTP 请求/响应的步骤:(工作原理) 客户端连接到 Web 服务器 一个 HTTP 客户端,通常是浏览器,与 Web 服务器的 HTTP 端口(默认为 80)建立一个 TCP 套接字连接.例如,h ...
- js实现大转盘抽奖(vue举例)
在开发项目得时候遇到这样一个需求,在移动端项目有个支付抽奖页面,大概效果图如下: 简单介绍一下需求,点击抽奖按钮转盘转动,转盘里边黄色块块是个整张背景图,里边的商品是从接口获取得,包括奖品名称和图片, ...