版权声明:本文为博主原创文章,欢迎转载。请保留博主链接:http://blog.csdn.net/andrewfan

指令格式 英文单词全写 指令解释
nop no operation performed 不做任何操作,留待后续版本补齐此操作码功能
ldc.i4 num load const 将操作常数数num推送到计算堆栈.
其中i4代表int32常数,栈顶结果为int32;
ldc.i8,代表推送int64常数,结果为int64;
ldc.i4.s,代表推送int8,结果为int32;
ldc.i4.m1,代表推送-1(minus 1),结果为int32;
ldc.r4,代表推送float32,结果为float32;
ldc.r8,代表推送float64,结果为float64;
ldloc n load local 加载第n个本地变量到计算堆栈;
ldloc.n,n取0~3,代表加载n处的本地变量;
ldloc.s n,短格式,针对0~255之间数值,更高效;
ldloca index load local 加载第n个本地变量的地址到计算堆栈;
ldloca.s 短格式
stloc.n stack local 弹出计算堆栈上的栈顶元素,存储到本地变量列表(即调用堆栈)的第n个位置,即赋值给第n个局部变量(函数参数也被编译为局部变量)
box valTypeToken box 装箱,将值类型封装成valTypeToken指定的对象类型,流程是,弹出计算堆栈上的值类型参数,并使用新建立的一个引用类型对象进行并包装,将包装结果返回计算堆栈。本过程产生GC Alloc。
unbox valType unbox 拆箱,将引用类型转换成相应值类型valType,流程是,弹出计算堆栈上的引用类型参数,并执行拆箱转换,将转换完成的值类型结果推送回计算堆栈
unbox.any typeTok unbox any 拆箱,将引用类型转换成相应值类型或者引用类型typeTok,流程与unbox相同,差别是,如果typeTok是值类型,则与unbox相同;如果typeTok是引用类型,则与castclass相同,即执行类型转换
castclass classT cast class 强制类型转换,流程是,将计算堆栈上的参数弹出,并验证其是否是继承了classT指定的class,或者实现于classT指定的接口,如果不是,则引发转换异常;如果转换正常,则把转换后的结果引用返回;如果当前的参数本身是null,则也返回null
initobj typeTok init object 将当前计算堆栈栈顶单元视为某个值类型对象的地址,调用值类型typeTok的初始化方法,将此地址指向的值类型单元置为0,与newobj指令不同 ,initobj不调用构造函数方法。
call methodDesc call method description 应用于早绑定的函数调用,即它不会考虑函数重载。在函数调用之前,传递的参数应该已经被压到计算堆栈上,此时执行call指令,执行完成之后,将会执行ret指令,并将返回值存储到计算堆栈。
callvirt method call method 应用于晚绑定的函数调用,即它会计算函数重载。除此之外,其运行步骤与call相同。【每个函数调用起始,都会有2句话max stack …;.locals init(…),是否是由它们弹出当前计算堆栈上的参数,并存放到当前的局部变量列表(Call Stack)中,所以在返回时,不用关心之前压入参数占据堆栈单元的问题?】
ret return 从当前函数返回,并且将返回值从当前函数的计算堆栈推送到调用者函数的计算堆栈
newobj ctor new object constructor 创建一个新引用类型或者值类型对象实例,并将创建出来的引用压入计算堆栈,并调用其后面跟随的ctor构造函数。如果当前创建的是值类型对象,那么它压入当前堆栈的是内存地址位于当前堆栈上的对象引用。此方法会产生GCAlloc

【Unity优化】我所理解的IL指令的更多相关文章

  1. 【Unity优化】Unity中究竟能不能使用foreach?

    关于这个话题,网络上讨论的很多,我也收集了一些资料,都不是很齐全,所以自己亲自测试,这里把结果分享给大家. foreach究竟怎么了? 研究过这个问题的人都应该知道,就是它会引起频繁的GC Alloc ...

  2. 读<你必须知道的.NET>IL指令笔记

    IL指令笔记: 1.newObj和initObj MSDN解释:newObj用于分配和初始化对象,而initObj用户初始化值类型 newObj解释: (1):从托管堆分配指定类型所需要的全部内存空间 ...

  3. IL指令速查

    名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...

  4. [Unity优化] Unity CPU性能优化

    前段时间本人转战unity手游,由于作者(Chwen)之前参与端游开发,有些端游的经验可以直接移植到手游,比如项目框架架构.代码设计.部分性能分析,而对于移动终端而言,CPU.内存.显卡甚至电池等硬件 ...

  5. 对Conjugate Gradient 优化的简单理解

    对Conjugate Gradient 优化的简单理解) 机器学习&数据挖掘笔记_12(对Conjugate Gradient 优化的简单理解) 数学优化方法在机器学习算法中至关重要,本篇博客 ...

  6. 【Unity优化】构建一个拒绝GC的List

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 上篇文章<[Unity优化]Unity中究竟能不能使用foreach?> ...

  7. 再议Unity优化

    0x00 前言 在很长一段时间里,Unity项目的开发者的优化指南上基本都会有一条关于使用GetCompnent方法获取组件的条目(例如14年我的这篇博客<深入浅出聊Unity3D项目优化:从D ...

  8. Android破解学习之路(十六)—— dll破解的IL指令

    IL指令介绍 IL是.NET框架中中间语言(Intermediate Language)的缩写. 使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不 ...

  9. UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升

    UNITY 优化之带Animator的Go.SetActive耗时问题,在手机上,这个问题似乎并不存在,因为优化了后手机上运行帧率并未明显提升 经确认,这个问题在手机上依然存在,不过占的比例非常小.因 ...

随机推荐

  1. bug工具

    在线工具:柠檬bug管理--兼顾项目管理 开源工具:PPM Bug 缺陷管理系统 项目管理.bug管理:http://www.bugfree.cn

  2. mysql存储过程中in、out、inout参数使用实际案例

    1.参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去)//为了避免存储过程中分号(";")结束语句,我们使用分隔符告诉mysql解释器,该段命令是否已经结束了./ ...

  3. 笔记整理——linux程序设计

    数据库 (2013/2/27 16:07:11) 线程 (2013/2/27 15:47:51)   信号 (2013/2/27 15:31:28)         消息队列.共享内存 (2013/2 ...

  4. Yii 1.0 基础

    骨架搭建 1.下载2.windows 创建PHP环境变量,找到php.exe的目录D:\wamp\bin\php\php5.3.5,右键我的电脑,属性\高级设置,path最后添加 ;D:\wamp\b ...

  5. MySQL 安装 5.0

    MySQL免安装版配置 1.下载 MySQL 免安装版 2.将 MySQL 解压到待安装目录,使用%MYSQL_HOME%表示 3.打开文件my-huge.ini另存为my.ini,在my.ini文件 ...

  6. C++第五天学习

    回顾: 1.友元 friend 2.运算符重载 类型 operator运算符(参数表) 抽象.封装 类是面向对象程序设计中最基本的概念 类的背后隐藏的思想是数据抽象和封装 是进行封装和数据隐藏的工具, ...

  7. js架构设计模式——前端MVVM框架设计及实现(一)

    前端MVVM框架设计及实现(一) 最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我 ...

  8. HTML模块化:使用HTML5 Boilerplate模板

    HTML5 Boilerplate 是一个由 Paul Irish(Google Chrome 开发人员.jQuery 项目成员.Modernizr 作者.yayQuery 播客主持人)主导的“前端开 ...

  9. Xcode 设置文件生成时的模板

    1. 目的 设置 Xcode 生成的文件的格式,如姓名.公司等. 2. 步骤 2.1. 找到文件 step 1. 右键Xcode图标 step 2. 显示包内容 step 3. 找到目录 /Conte ...

  10. Java Swing jpanel paint方法执行两次的问题

    Java Swing jpanel paint方法执行两次的问题: 在其他环境下执行了两次,自己测试怎么都是执行了一次,记录一下这个问题:需要后继工作: 可能是进行各种参数设置的时候导致了paint方 ...