3D游戏编程入门经典(2)

安之若素 分享 2021-06-02 下载文档

图1-1 gac

人们对运行.net代码的最常见误解之一是,代码是“解释执行的”,像java代码或者老的visual basic运行库一样。事实上,为.net编写的代码在执行前首先被编译。当编译.net应用程序时,它被编译为一种中间语言(il,intermediary language)。这种il实际上存储在可执行文件中或者已经创建的库中。

il可能在两个位置中的某一处被编译为本机代码(native code)。在安装代码时,可以执行一个称为ngen(native generation,即本机生成器)的进程。它将il直接编译为本机代码,并将所编译的本机代码存储在gac中的特定位置—— 本机程序集缓存(native assembly cache)中。假设在安装时没有编译代码,则代码在第一次执行前必须被编译。在应用程序启动期间,.net运行库中一种称为jit(just in time)编译器的特殊功能在后台执行编译工作。

在后一种情形中,因为发生在后台的编译工作,应用程序的启动时间将受到影响。当启动时间对应用程序非常重要时(例如正在编写游戏时),确保在安装阶段包含ngen步骤是比较明智的。但是,在这期间无法进行某些优化,而如果利用jit编译代码,则可以进行这些优化,因此如果启动时间不是很重要,则可以让.net运行库处理它所能够做的工作。

在本书中将经常提到托管代码。在全书中使用的api被称为managed的directx,.net语言常被称为托管语言。术语“托管”来源于.net运行库具有一个内置的内存管理器这一事实。

在“过去”(只是几年前),使用c和c++编写代码的开发人员不得不自己进行内存管理。当不再需要已分配的内存空间时,必须将其释放,除非希望该内存被“泄漏”,内存泄漏将带来严重的性能问题。更糟糕的是因为直接处理指针,而它很容易破坏项目正在使用的内存。在很多情况下,这将导致很长时间的故障调试,因为通常实际看到出错的地方并不是内存初始被破坏的地方。

人们认为c和c++语言难于掌握,主要是因为具有很多这种类型的问题。许多开发人员不愿意尝试c和c++,也是因为这个原因,他们尝试使用其他没有这些令人头痛问题的高级语言,例如visual basic。尽管这些新语言具有易用易学的优点,但也具有一些缺点。它们的性能无法与c和c++语言相比,在大多数情况下显得特别慢。另外,因为底层操作系统是使用c++开发的,所以这些语言难以实现c++的所有功能。尽管可以使用它们处理很多非常好的工作,但是如果想要获得操作系统的所有性能和优势,只能依靠自己。

与.net运行库的第一个版本相比,.net的大多数内容都已经改变了。microsoft公司几乎完全重新设计了一种新的api,竭力确保开发人员关心的问题都会被解决。这种新的运行库必须易学易用,快速高效,并且不存在令人头痛的内存管理问题。在本书中,将看到.net在这些方面的好处。


3D游戏编程入门经典(2).doc 将本文的Word文档下载到电脑

下一篇:C15048互联网金融的发展趋势 课后测验

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx