C#中unsafe的使用

原创 2006年05月26日 10:07:00

1. unsafe在C#程序中的使用场合:

1)实时应用,采用指针来提高性能;

2)引用非.net DLL提供的如C++编写的外部函数,需要指针来传递该函数;

3)调试,用以检测程序在运行过程中的内存使用状况。

2. 使用unsafe的利弊

好处是:性能和灵活性提高;可以调用其他dll的函数,提高了兼容性;可以得到内存地址;

带来麻烦是:非法修改了某些变量;内存泄漏。

3. unsafe与unmanaged的区别

managed code是在CLR监管下运行的程序。以下任务由CLR来执行:管理对象内存,类型安全检测和冗余处理。从另一方面来说,unmanaged code也就是能由程序员直接进行内存操作的程序。而unsafe是介于managed和unmanaged之间的桥梁,它使得managed code也能使用指针来控制和操作内存。

4. unsafe的使用

unsafe可以用来修饰类、类的成员函数、类的全局变量,但不能用来修饰类成员函数内的局部变量。编译带有unsafe代码的程序也要在“configuration properties>build” 中把允许unsafe代码设为真。

但是在managed code中使用unsafe时也要注意,正因为CLR可以操作内存对象,假如你写了一下代码:

      public unsafe void add(int *p)
      {
          *p=*p+4;
      }

p的地址值可能会在运行过程中被CLR所修改,这通常可采用fixed来处理,使指针所指向的地址不能被改变。如下:

      fixed(int *p=& value)
        {
            add(p);
        }

 

如何让C#编译不安全代码(含unsafe的代码)

背景:有关键字unsafe,其代码在vs编译环境中会报错。报错信息:“不安全代码只会在使用/unsafe编译的情况下出现” 解决方案: 1、vs菜单“项目”中找到“(解决方案名称)属性”项,单击进...

《你不常用的c#之一》:略谈unsafe

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

c#中unsafe关键字用法

(*) unsafe 和 fixedunsafe{                   int[] array = new int[10];    for (int i = 0; i < array....
  • xelone
  • xelone
  • 2010年08月30日 10:26
  • 925

.Net中unsafe编程详解

以c#为例。一,打开unsafe编程开关   工程中默认的配置是不支持代码的非安全性的,所以第一次使用你得:      解决方案管理器→→Properties→→生成选项卡→→允许不安全代码。 二,何...

c# 指针unsafe/fixed -- 【一】

详细介绍C#中怎样使用指针操作:unsafe、fixed等

Visual Studio 2010——C#中的Unsafe模式

实验环境:Windows XP,Visual Studio 2010  Ultimate         由于在C#中指针的使用被认为是“不安全代码”,因此在大多数情况下不鼓励使用,但是在有些情...

C#中指针*的使用(unsafe关键字与fixed 语句)---01

unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。有关更多信息,请参见不安全代码和指针(C# 编程指南)。 可以在类型或成员的声明中使用 unsafe 修饰符。因此,类型或...
  • lujunql
  • lujunql
  • 2011年11月11日 23:03
  • 18765

Unsafe

来源:http://mishadoff.com/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/ Java是一门安全的编程语言,并且防范程序员犯大量的愚...
  • JJYWEN
  • JJYWEN
  • 2016年04月15日 23:25
  • 4534

Java --- Unsafe

Java --- Unsafe 初步介绍 在AQS,Netty和Guava的源码中出现了sun.misc.Unsafe 的身影。Unsafe类的定义是:执行底层,不安全的操作的方法的集合,所有的方...

unsafe 库使用小结

unsafe 库让 golang 可以像 C 语言一样操作计算机内存,但这并不是 golang 推荐使用的,能不用尽量不用,就像它的名字所表达的一样,它绕过了golang的内存安全原则,是不安全的,容...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中unsafe的使用
举报原因:
原因补充:

(最多只允许输入30个字)