Dev in Nightmare

程序设计+图形图像+游戏开发

用户操作
[即时聊天] [发私信] [加为好友]
nightmare:qrliID:Nightmare
93428次访问,排名1045,好友0人,关注者4人。
Nightmare的文章
原创 71 篇
翻译 4 篇
转载 7 篇
评论 57 篇
nightmare:qrli的公告
转贴请注明出处,路过请回帖顶顶,拍砖请精准打击
最近评论
mm19850110:我想知道c++和C#在图形处理能力方面的差别?尤其在处理遥感图像方面。
kinsung:还是很好用的。要不然,win32平台用什么?
Nightmare:是Defective,不是《Effective C++》那本书
galilio:是effective c++吧
redfly:我只能下载到direct9的SDK,哪里可以下载到directx10的SDK?
direct3D开发真是麻烦,才开始看它
hyd2001_2008@163.com
文章分类
收藏
相册
链接
Collada
GameDev.net
Irrlicht Engine
IT公司速查手册
Lua相关项目
Lua脚本
Programmer's Notepad
SlimDX
XNA
存档
订阅我的博客
XML聚合  FeedSky

原创 .NET 3.5 SP1的发布让C#和C++的性能比较问题有了定论收藏

新一篇: 简帛《老子》古本合校 | 旧一篇: Parameter与Argument的区分

一直以来对CLR即时编译生成的汇编码抱有很多疑问,很多地方并没有像微软声称的那样被优化,尤其是并没有内联(inline)。曾经猜想那是为了IDE能够调试而少做了一些优化,在不连接调试器的情况下应该能声称最优代码。随着.NET 3.5 SP1的发布,谜团终于解开了。

.NET 2.0的CLR并没有对含有值类型(value type)参数、返回值或局部变量的函数做内联。当然,这也包括所有值类型的属性getter和setter。这是多么令人心痛的性能损失啊!值类型本来是设计成轻量级以提高性能的,结果却在优化方面大打折扣,反而不如引用类型。3.5 SP1终于补救了这一点,虽然太晚了一点,但聊胜于无。

这样C#和C++的性能争论(有争论的必要吗?)完全可以画个句号了:在.NET 3.5 SP1之前,相同的算法必定是C++快。那些对CLR即时编译能对当前CPU架构做特别优化而提高性能的期望可以完全忽略了。

补救虽然来得晚了,但也带来了另外一份礼物:值类型局部变量将能被优化成寄存器变量了。这是个C/C++里尽人皆知却极少被真正实现的优化。直到C语言的C99规范引入了__restrict修饰符,才使这种优化彻底成为可能。而C++目前还只能望洋兴叹,或者等待C++ 0x规范也加入__restrict。而新的.NET CLR将能在即时编译的条件下找出能够晋级到寄存器的变量,而不必再访问堆栈,从而大幅提高性能。

参考链接:
http://blogs.msdn.com/clrcodegeneration/archive/2007/11/02/how-are-value-types-implemented-in-the-32-bit-clr-what-has-been-done-to-improve-their-performance.aspx

发表于 @ 2008年08月22日 15:02:00|评论(loading...)|收藏

新一篇: 简帛《老子》古本合校 | 旧一篇: Parameter与Argument的区分

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © nightmare:qrli