最近几天有幸得到闪电大哥的指点,了解了EMIT和IL中的一些指令。虽然有高射炮打蚊子的说法,但是我相信“二八定律”,80%的功能可以用20%的技术解决,20%的功能只能用80%的技术解决。大哥的博客:http://www.cnblogs.com/qldsrx/p/4542496.html

在C#底层中,IL正发着耀眼的光芒。第一次完整的看到EMIT(反射的发出,基本就是用 代码手写IL,然后执行,效率最高,性能最好,编写难度很大)是在闪电大哥的OWIN框架。闪电大哥自己封装了OWIN的框架可以做webApi也可以做网站。写得很好,用EMIT也做了大量的优化,在windows和linux都可以良好的运行,linux上在宿主jexus上完美运行,IIS更不用说。(项目地址:https://github.com/qldsrx/OwinFramework),用来做WebApi很好用的!

然后是IL中的栈,栈这个我理解成一个桶,这个桶可以放一定数量的圆饼,符合先进后出的原则。在做一些加减乘除的操作的时候,会弹出顶部两个参数进行操作,操作后的结果将会重新压人栈中。

int i=;
int j=;
int k=;
Console.WriteLine(i+j+k);

如上代码编译成IL后,是先会定义一个栈的大小,然后为三个变量分配内存,接着将值1,2,3分别载入到这些变量中。慢慢的再将索引第一个变量和索引第二个变量压入栈,做add操作,得到值后压入栈,接着将索引第三个变量压入栈,再做add操作,并将结果压入栈。最后是call函数Writeline,弹出栈顶部的参数传入执行。当然,结束后要return。

IL中的栈和闪电的Owin推荐的更多相关文章

  1. 关于VS中更改栈和堆空间的大小

    编号:1008时间:2016年4月12日17:01:38功能:关于VS中更改栈和堆空间的大小 URL:http://blog.csdn.net/icerock2000/article/details/ ...

  2. .NET(C#):分析IL中的if-else,while和for语句并用Emit实现

    这是一篇关于IL和反射Emit的文章(所以不喜欢IL或者Emit的就没必要往下看了),要求读者对IL和Emit工作原理较了解.所有分析IL均在Visual Studio 2010 SP1下编译生成.( ...

  3. Lua 和 C 交互中虚拟栈的操作

    Lua 和 C 交互中虚拟栈的操作 /* int lua_pcall(lua_State *L, int nargs, int nresults, int msgh) * 以保护模式调用具有" ...

  4. Lua的函数调用和协程中,栈的变化情况

    Lua的函数调用和协程中,栈的变化情况 1. lua_call / lua_pcall   对于这两个函数,对栈底是没有影响的--调用的时候,参数会被从栈中移除,当函数返 回的时候,其返回值会从函数处 ...

  5. js 中的栈和堆

    js中的栈与堆的讲解/基本数据类型与引用类型的讲解 前言:1. 学习前端,入门简单,想学好确实是一件很困难的事情,东西多而且杂,版本快速迭代,产品框架层出不穷. 2. 前端学习成本确实很高,需要不断的 ...

  6. javascript中的栈、队列。

                           javascript中的栈.队列 栈方法     栈是一种LIFO(后进先出)的数据结构,在js中实现只需用到2个函数 push()  接受参数并将其放置 ...

  7. 面试01:解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法

    栈的使用:通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间. 队的使用:通过new关键字和构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域 ...

  8. 浅谈Java中的栈和堆

    人们常说堆栈堆栈,堆和栈是内存中两处不一样的地方,什么样的数据存在栈,又是什么样的数据存在堆中? 这里浅谈Java中的栈和堆 首先,将结论写在前面,后面再用例子加以验证. Java的栈中存储以下类型数 ...

  9. Java中 堆 栈,常量池等概念解析(转载)

    1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符 ...

随机推荐

  1. 简洁之美 -约瑟夫环的python 解法

    问题描述: 约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.从编号为k的人开始报数,数到k的那个人出列:他的下一个人又从1开始报数,数到k的那个人又出列:依此规律重复下 ...

  2. http是什么?

    http HyperText Transfer Protocol 超文本传输协议,是一个应用层通信协议. 可以用wireshark抓取.

  3. OpenGL: 渲染管线理论

    http://blog.csdn.net/augusdi/article/details/19934463 学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解. 首先要知 ...

  4. LibreOffice源码编译以及生成VS项目

    最权威的社区链接:https://wiki.documentfoundation.org/Development/BuildingOnWindows 也许英文好的人直接看wiki上的说明就能很容易的编 ...

  5. C++学了这么多年,你仍不知道的事

    C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...

  6. golang初体验

    使用golang开发已经有一个多月了,除了一开始遇到的各种小白问题,IDE的选择,gopath,goroot的配置...后边还算顺风顺水的.实践体验,golang真的适合快速开发.特别是后台开发,直接 ...

  7. dedecms手机站要同步pc站的图片

    首先在dede目录下面找到  /include/extend.func.php  文件 //添加自定义函数 function replaceurl($newurl){ $newurl=str_repl ...

  8. linux 内核调试

    内核中有多项用于调试的功能,但这些功能会造成额外输出,并导致性能下降,因此发行版本厂商通过都禁止发行版内核中的这些功能.但作为一名内核开发者,调试需求具有更高的优先级,因此应该构造并安装自己的内核,并 ...

  9. .NET环境配置(二)

    打开IIS服务器   首先在设置程序池 应用程序池 设置  ASP.NET v4.0         ASP.NET v4.0 Classic CLassic.NET AppPool DefaultA ...

  10. Ajax清除浏览器js、css、图片缓存的方法

    做东东时都是把图片在服务器的地址存放在数据库里面,然后到浏览器中显示,但是后来发现了两个问题. 第一:为了安全起见,js是无法读取本地的图片的,不然你写一个js,岂不是可以获取任何人电脑里面的文件了. ...