ddc
联网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
网站建设 域名注册 网站建设 虚拟主机 广州网站设计 域名注册 广州网站建设 上海网站建设 虚拟主机 广州网页设计 虚拟主机 域名注册 acg王国 ACG玩家 品牌设计 上海网站建设
求创科技
网站建设
中国互联
素材出售
中国设计秀
中资源
当前位置:网络学院首页 >> 编程开发 >> .net >> 让JIT运行代码的方法

让JIT运行代码的方法 (1)

来源:中国设计秀    作者:    点击:46     加入收藏    发表评论
0
顶一下

译者:我们都知道.NET托管代码如C#、VB.NET写成的代码,都是先被编译成中间语言(IL,Intermediate Language,在运行时,再由即时编译器(JIT,Just-In-Time)编译成本机代码。那么这个神秘的过程是怎么进行的呢,JIT会在什么时 机编译你的代码呢,下面这篇翻译文章将给大家介绍这个过程,大家不要被开始复杂的工具和命令吓到,只要你坚持读下去,一定会有所收获

在接下来的几篇".net 揭密"系列文章中,我将会介绍大多数人认为理所当然的东西——代码调用,到底代码调用是怎么工作的(注意在这篇文章中我们要讨论的是非常基础的"调用"过 程,虽然看起来十分浅显,实际上这确实十分重要的,因为他可以极大的影响代码的效率,并且让你深刻的认识ClR的工作方式

首先让我们建立一个测试代码

class Foo {public void Test() {for (int i = 0; i < 10; i++) {Console.WriteLine("Test");}}}class Program {static void Main(string[] args) {Foo f = new Foo();f.Test();f.Test();f.Test();}}

代码清单 1: 用于讨论的简单代码

为了运行这一小段代码JIT必须解决许多问题,让我们进入他的工作流程,更好的了解到底发生了什么.

在程序的控制权没有交给我们的代码之前,Main方法首先被编译,控制权就被交给了Main方法,代码的反编译源如下

static void Main(string[] args) {Foo f = new Foo();00000000 push esi00000001 mov ecx,913080h00000006 call FFB21FAC0000000b mov esi,eaxf.Test();0000000d mov ecx,esi0000000f cmp dword ptr [ecx],ecx00000011 call dword ptr ds:[009130B8h]f.Test();00000017 mov ecx,esi00000019 cmp dword ptr [ecx],ecx0000001b call dword ptr ds:[009130B8h]f.Test();00000021 mov ecx,esi00000023 cmp dword ptr [ecx],ecx00000025 call dword ptr ds:[009130B8h]0000002b pop esi}0000002c ret
代码清单 2: main方法的反编译源

我们可以看到生成的代码通过间接寻址(译者注:指的是上面00000011 call dword ptr ds:[009130B8h],我在这里给不熟悉这个术语的人解释一下间接寻址:通过内存地址中的地址来找到实际地址的寻址方法叫做间接寻址.听起来很复 杂,其实你可以这样理解,我叫你找一个人,直接给你他的地址,然后你通过这个地址找到这个人,叫直接寻址,那么我给你一个地址,告诉你这个地址住的人知道 你要找的人在哪里,这就是间接寻址,在程序里,内存地址就相当于我给你的地址,内存地址里存储的值才是你最终需要的地址)来发起调用,这样做当然是有原因 的,在我们解释这个问题之前,先打开值得我们信赖的挚友——调试器,不过你可能需要先阅读这篇文章,怎样用Visual Studio查看非托管代码,并初步了解SOS(Son Of Strike)(译者注:SOS是一个VS自带的调试非托管代码的辅助模块,如果不了解,并不妨碍你理解本文的主要原理)

我将用粗体标识所有的调试器命令,并以普通字体标识其输出

在代码的第一行打上一个断点并开始调试,所有的SOS命令都需要在VisualStudio的"立即窗口"(Immediate window)中输入(译者:通过在命令窗口(command window)中输入immed并回车,就可以进入立即窗口)

[1] [2] [3] [4]
2007-08-27 16:00:00    出处:
Google
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明 | 网站公告 | 友情链接 | 留言 | 旧版入口