版权声明:本文为博主原创文章,欢迎转载。请保留博主链接: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. 1833: [ZJOI2010]count 数字计数

    1833: [ZJOI2010]count 数字计数 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 2951  Solved: 1307[Submit][ ...

  2. 创建 Web 前端开发环境(node和npm)

    Web 前端开发涉及多种工具,这里将常用工具的安装和配置进行说明,提供了详细的说明,为后继的开发创建一个坚实的基础. 本文介绍的工具有:NodeJS, NPM, Bower, Git 和 Grunt. ...

  3. js原生设计模式——12装饰者模式

    1.面向对象模式装饰者 <!DOCTYPE html><html lang="en"><head>    <meta charset=&q ...

  4. MySQL删除单列重复或多列同时重复值并保留一条

    在生产环境中,我们有的列是不允许出现重复值的,亦或是某两列不允许同时重复,但由于前端未做限制,或者没限制住,出现了单列重复值,或者两列本应组成唯一组合却也出现重复,这两种情况都是不允许的.现在由于前端 ...

  5. Flex移动应用程序开发的技巧和窍门(四)

    范例文件 flex-mobile-dev-tips-tricks-pt4.zip 这是本系列文章的第四部分,该系列文章涵盖Flex移动开发的秘诀与窍门. 第一部分关注切换视图以及切换执行应用时的数据处 ...

  6. Servlet生命周期方法,request.getRequestDispatcher

    1,request.getRequestDispatcher 方法全称javax.servlet.ServletRequest.getRequestDispatcher(String) 2,在web. ...

  7. jstree获取整棵树的json数据

    $("#树ID").jstree(true).get_json();

  8. [转载] A successful Git branching model/GIT分支管理是一门艺术

    转载自:http://www.cnblogs.com/baiyw/p/3303125.html 英文原文:http://www.nvie.com/posts/a-successful-git-bran ...

  9. 背景图height:100%显示

    这段时间,写移动端页面,总是遇到背景图在不同的设备上的显示拉伸问题: 本来想写百分比,可是并没有显示,又不想media@ ,换一种思路用img写 群友提供了一个办 html,body{height:1 ...

  10. 性能优化之数据存储&DOM编程

    多读书多看报 数据存储 ·在javascript中,数据存储的位置会对代码整体性能产生重大的影响. ·数据存储共有4种方式:字面量.变量.数组.对象成员.   ·要理解变量的访问速度,就要理解作用域. ...