《不安全代码》PPT课件.ppt
《《不安全代码》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《不安全代码》PPT课件.ppt(26页珍藏版)》请在三一办公上搜索。
1、第16章 不安全代码,(时间:1次课,2学时),第16章 不安全代码,前面各章节介绍的C#源程序都是在公共语言运行时CLR的管理下执行的代码,它们都是受控代码,C#语言不允许在受控代码中使用指针(而指针恰恰就是带来不安全的根源),所以C#受控代码又称为安全代码,而使用指针的代码就称为不安全代码。本章重点介绍如何组成C#源程序的不安全代码块以及在不安全代码中定义和使用指针的方法。本章教学目的:掌握指针和不安全代码的概念掌握指针的使用掌握C#中不安全代码的使用机制和实现方法,第16章 不安全代码,16.1 不安全代码 16.2 不安全的代码块 16.3 C#程序中的指针,16.1 不安全代码,由于
2、受控代码中不允许使用指针,所以它是安全的,这对我们的大多数应用程序都是有益的。但是,在某些情况下我们必须使用指针,例如,调用底层操作系统、访问内存映射驱动器(属于系统级的应用)以及执行对时间有严格要求的算法等。为了能在一定的应用中使用指针,C#语言引入了不安全代码(unsafe code)的概念,并提供了创建和使用不安全代码的模式。指针是C/C+语言的一个重要概念,也是其重要的特色之一。熟悉C/C+的人都知道指针就是变量的内存地址,所以常把变量的地址称为变量的指针,而把存放地址的变量叫做指针变量。因此,指针有点像C#中的引用,但它们是有区别的:指针可以指向任何内存空间,但引用只能指向某个类的对
3、象。正因为指针可以指向任何内存空间,所以有可能会被滥用,这就是为什么创建C#的受控代码时,不允许使用指针的原因所在。C#允许创建和使用指针,但对指针的使用限制很多,将创建和使用指针的代码称为不安全代码,而且这种不安全代码不在CLR的控制下执行,所以又称为非受控代码。在C#语言中要使用指针,首先必须组成C#不安全代码模块(使用关键字unsafe和fixed),然后才能在C#不安全代码中定义和使用指针(和在C/C+中使用指针的方法一样)。现在我们知道C#语言的源程序有两种运行模式:“安全”模式和“不安全”模式。在前面各章节中介绍的例子都是运行在安全模式下的,这也是C#语言默认的运行方式。本章将介绍
4、的是C#不安全运行模式。需要强调的是,C#语言主要是创建受控代码的,它支持非受控代码的能力只是使它可以用来解决一些特殊的应用问题,而这并不是标准的C#程序。,16.2 不安全的代码块,16.2.1 指针 16.2.2 unsafe关键字 16.2.3 fixed语句,16.2 不安全的代码块,如果我们的应用问题需要使用指针,则在使用C#语言编程时就需要先定义一个不安全代码块,在代码块中才能使用指针。,16.2.1 指针,在介绍不安全代码块之前,先简单介绍(或复习)指针的概念。1.定义指针变量指针变量就是存放对象地址的变量。比如,变量x保存了变量y的地址,那么就说变量x是指针变量,或者说x指向y
5、。定义指针变量的语句格式为:数据类型*变量名;,16.2.1 指针,2.给指针变量赋值上述定义ip为指针变量,表示ip将用来保存某个整型变量的内存地址,这个地址就是该变量在计算机内存中的位置。那么如何给指针变量ip赋一个地址(又叫指针值)呢?给指针变量赋值要用“&”运算符,这是“取地址”运算符。,16.2.2 unsafe关键字,如果我们想要在C#语言的源程序中使用指针,则必须在相应的类、结构、接口或代理的定义中使用unsafe修饰符,或者在语句中使用unsafe关键字以指定能使用指针的代码区域“不安全”代码或“非保护”代码。,16.2.2 unsafe关键字,【例16.1】使用不安全代码。u
6、sing System;public class UnsafeCodeunsafe static void MultiMethod(double*dp)/MultiMethod方法中可以使用指针*dp*=2;/dp为指针变量,用于执行乘法赋值运算public unsafe static void Main()/Main()方法中可以使用变量的指针double x=10;MultiMethod(程序运行结果:20,16.2.2 unsafe关键字,在上例中,使用指针变量作为方法的形参,则在调用方法时传递的是变量的地址而不是数值;而如果将方法MultiMethod改为不使用指针变量作为形参,则调用
7、方法之后变量x的数值是不会变为20的,仍然为10。在上例中不论是使用指针的主方法,还是利用指针变量进行计算的方法,MultiMethod的定义中都使用了unsafe修饰符。现在我们把主方法代码改写如下:public static void Main()double x=10;unsafe MultiMethod(,16.2.3 fixed语句,.NET框架的公共语言运行时CLR环境提供了“自动管理内存”的功能(垃圾回收器),我们在程序设计中只需定义变量(系统根据此变量自动分配内存),而无需关心在程序的功能执行完后,如何来释放被变量占用的内存,CLR环境会不定期地对程序所使用的内存进行管理,自动
8、释放无用变量占用的内存。但是,我们不知道这种“自动内存管理”在程序的执行过程中何时发生,而有时我们不希望被某个指针变量引用的变量被这种自动内存管理“自动处理”掉(移动或回收),这时在程序中就需要对这个指针变量使用fixed关键字加以声明,目的是通知系统,该指针变量所指向的变量不能按“自动管理内存”的方式处理。fixed语句主要用来防止系统进行“自动内存管理”时移动或释放被某个指针变量所指向的变量。语句格式如下:fixed(数据类型*指针变量=&变量)/使用存储位置固定的对象/代码,16.2.3 fixed语句,【例16.2】使用fixed语句。using System;public class
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 不安全代码 不安全 代码 PPT 课件
链接地址:https://www.31ppt.com/p-4866234.html