以c#为例。
一,打开unsafe编程开关
工程中默认的配置是不支持代码的非安全性的,所以第一次使用你得:
解决方案管理器→→Properties→→生成选项卡→→允许不安全代码。
二,何时要用unsafe
1.一个原则
unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。
2.什么时候用指针
msdn里说 “在 C# 中很少需要使用指针,但仍有一些需要使用的情况。例如,在下列情况中使用允许采用指针的不安全上下文是正确的: 处理磁盘上的现有结构, 涉及内部包含指针的结构的高级COM或平台调用方案, 性能关键代码”
- Dealing with existing structures on disk
- Advanced COM or Platform Invoke scenarios that involve structures with pointers in them
- Performance-critical code
总之,一条判断标准:当你使用C/C++能给带给你的利大于弊时都可以使用unsafe编程。
三,unsafe的使用方法(几个例子)
1.unsafe一个方法体
2.unsafe一段代码
3.网上找的一个较大unsafe例子
四,使用unsafe时可能用到的fixed
1.为什么要用fixed
Unsafe的代码托管代码 (managed code)和非托管代码(Unmanaged Code)之间,它也是在CLR的环境中执行,但是可以用来直接操作内存。但由于代码是在CLR下托管执行,为了减少内存碎片C#的自动垃圾回收机制会允许已经分配的内存在运行时进行位置调整,所以如果我们多次调用的话就可能 导致指针指向其他的变量。比如*pInt为指向一个变量的地址为1001,CLR在重新内存整理分配后该变量就存储在地址为5001的地方。而原来1001的地方可能会被分配其他变量,要解决这个问题我们就需要使用Fixed关键字。
2.使用fixed的例子
fixed 语句禁止垃圾回收器重定位可移动的变量。fixed 语句只能出现在不安全的上下文中。Fixed 还可用于创建固定大小的缓冲区。
五,参考
1.http://msdn.microsoft.com/zh-cn/library/chfa2zb8.aspx
2.http://msdn.microsoft.com/zh-cn/library/f58wzh21.aspx
3.http://msdn.microsoft.com/en-us/library/t2yzs44b%28v=VS.80%29.aspx
---------全文完 ------