托管代码与非托管代码的性能比较
来源:互联网 发布:蓝月传奇龙魂数据w707 编辑:程序博客网 时间:2024/05/21 11:14
基本上每个人都知道的是,所有.Net语言都将被编译成为一个叫做IL汇编的中间语言。但是计算机是如何执行这个中间代码的,却是很多人不知道,甚至理解错误了的。
JIT是.NET程序运行的重要部件之一,全称是即时编译器。我刚才说的误解,就是很多人(绝对不是少数,问了很多c++程序员,10个有9个这种想法)都以为JIT其实就是跟Java VM差不多的东西,是一个Interpreter,在运行时读取IL汇编代码,然后模拟成x86代码(也就是俗称的虚拟机)。但是事实上,.NET使用的是更为高级的技术。 .Net程序被加载入内存以后,当某段IL代码被第一次运行的时候,JIT编译器就会将这段IL代码,全部编译成本地代码,然后再执行。这也就是为什么.NET程序第一次运行都启动很慢的原因! 随.NET库,微软还附带了一个工具,可以事先将.NET程序所有的IL代码都编译成本地代码并保存在缓存区中,这样一来,这个程序就跟c++编译的一模一样了,没有任何区别,运行时也可以脱离JIT了(这里不要混淆了,这里不是说可以脱离.NET库,而是说不需要在进行即时编译这个过程了)。所以,请不要将.NET和Java混为一谈,两个的运行效率根本不是一个等级的!
JIT的优化指的是可以针对本地CPU,在编译时进行优化。传统程序在编译时,为了保证兼容性,通常使用最通用的指令集(比如古老的386指令集)来编译。而JIT知道CPU的具体类型,可以充分利用这些附加指令集进行编译,这样的性能提升是很可观的。
C++中可以手动设置托管与非托管状态
这就是非托管类型:
class Foo
{
private:
int x;
public:
Foo(): x(0){}
Foo(int xx): x(xx) {}
};
这就是托管类型
__gc class Bar
{
private:
int x;
public:
Bar(): x(0){}
Bar(int xx): x(xx) {}
};
- 托管代码与非托管代码的性能比较
- 托管与非托管代码的区别
- 托管与非托管代码的区别
- 托管与非托管代码
- 代码托管与非托管
- 托管代码与非托管代码
- 托管代码与非托管代码
- 托管代码与非托管代码
- .net 托管代码与非托管代码
- .net 托管代码与非托管代码
- 托管代码与非托管代码
- 托管代码与非托管代码
- .net 托管代码与非托管代码
- 托管代码与非托管代码的区别
- 【笔试&面试】C#的托管代码与非托管代码
- 托管代码与非托管代码的区别
- 托管代码与非托管代码的区别
- 关于C#托管代码与非托管代码的理解
- SQLcode=-904 之Reason Code:00D70008
- 给vmware虚拟机添加启动延时
- banner变换导航 图片变换并连接到不同的网址
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之三 - 事件机制
- 数据读入excel表格
- 托管代码与非托管代码的性能比较
- 网线(绞线)的分类
- CSS公用文件
- 透明网关不认字段的解决方案(tg4mssql)
- 蓝鸟介绍
- SQL Server 返回最后插入记录的id值
- 利用OleDb对象,将数据库中全部表转换成XML文件
- javascript如何定义类
- jquery ajax的简单应用