.Net中unsafe编程详解

news/2024/7/4 0:50:12 标签: .net, pointers, struct, access, class, string
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

以c#为例。

一,打开unsafe编程开关

   工程中默认的配置是不支持代码的非安全性的,所以第一次使用你得:

      解决方案管理器→→Properties→→生成选项卡→→允许不安全代码。

 

二,何时要用unsafe

1.一个原则

   unsafe  关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。

2.什么时候用指针

    msdn里说 “在 C# 中很少需要使用指针,但仍有一些需要使用的情况。例如,在下列情况中使用允许采用指针的不安全上下文是正确的: 处理磁盘上的现有结构, 涉及内部包含指针的结构的高级COM或平台调用方案, 性能关键代码”

  • Dealing with existing class="tags" href="/tags/STRUCT.html" title=struct>structures on disk
  • Advanced COM or Platform Invoke scenarios that involve class="tags" href="/tags/STRUCT.html" title=struct>structures with class="tags" href="/tags/POINTERS.html" title=pointers>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

---------全文完 ------


http://www.niftyadmin.cn/n/1741214.html

相关文章

最经典的关于PV操作的解释说明

不知道各位有没有感觉,计算机方面的考试,操作系统那块似乎PV操作经常考,这一方面说明它的重要,另一方面也说明它不容易理解,出错的人很多,下面就举几个经典的例子来帮助大家学习,也与诸位同进步…

Windows Service完全教程

导读:   C#,.NET 1.0,.NET 2.0,.NET 3.0/3.5   阅读26 评 论0   在本文中我们将探讨如何创建一个Windows服务的应用程序。我将说明什么是Windows服 务,以及如何创建、安装和调试它。这需要使用System.ServiceProcess.ServiceBase命名空间中的…

C#中调用 调试C++的DLL

被C#调用的DLL一般只需要把导出的函数 以适当的形式呈现即可调用,比如extern "C" __declspec(dllexport)BOOL Integrate3 (){...},这样的函数,在C#里面声明如:[DllImport("xxx.dll", CallingConvention Call…

自定义CSDN博客CSS样式

可以在博客的配置页面的自定义css栏中填入css样式代码来自定也blog的风格 csdn blog的页面架构基本是由div实现的,整个页面主要由三个div组成,它们的id分别是: csdnblog_header, csdnblog_sidebar, csdnblog_content。 所以,定义它们的主体样…

正则表达式口诀

试作“正则表达式助记口诀” 又名“正则打油诗”,版本0.1,绝对原创,仿冒必究,:) 注:本文仅为学习正则时为了便于记忆而作,不能代替系统而全面的学习过程,错漏之 处&…

Effective C#读后感

Effective C#读后感 待续。。。

net托管资源和非托管资源

对于托管的资源的回收工作,是不需要人工干预回收的,而且你也无法干预他们的回收,所能够做的只是了解.net CLR如何做这些操作。也就是说对于您的应用程序创建的大多数对象,可以依靠 .NET Framework 的垃圾回收器隐式地执行所有必要…

C#编程指南

C#编程指南 在这我想把C#的一些编程要点简略的提一提,同时也会结合着《Effective C#》说一说。 待续。。。 参考: 1.http://msdn.microsoft.com/en-us/library/67ef8sbd%28vVS.80%29.aspx