zoukankan      html  css  js  c++  java
  • unsafe

      今天无意中发现C#这种完全面向对象的高级语言中也可以用不安全的指针类型,即要用到unsafe关键字。在公共语言运行库 (CLR) 中,不安全代码是指无法验证的代码。C# 中的不安全代码不一定是危险的,只是其安全性无法由 CLR 进行验证的代码。因此,CLR 只对在完全受信任的程序集中的不安全代码执行操作。如果使用不安全代码,由你负责确保你的代码不会引起安全风险或指针错误。unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。可以在类型或成员的声明中使用 unsafe 修饰符。因此,类型或成员的整个正文范围均被视为不安全上下文,不安全上下文的范围从参数列表扩展到方法的结尾,因此指针在以下参数列表中也可以使用。例如,用 unsafe 修饰符声明的方法:

     unsafe static int Sum(int* p)
            {
                return *p * (*p);
            }

      还可以使用不安全块从而能够使用该块内的不安全代码。例如:

    unsafe
                {
                    int a = 5;
                    int* b = &a;
                }

      若要编译不安全代码,必须指定 /unsafe 编译器选项,否则无法通过公共语言运行库验证不安全代码。在 Visual Studio 开发环境中设置此编译器选项

    1. 打开项目的“属性”页。

    2. 单击“生成”属性页。

    3. 选中“允许不安全代码”复选框。

      另外:不安全代码具有下列属性:

    • 方法、类型和可被定义为不安全的代码块。

    • 在某些情况下,通过移除数组界限检查,不安全代码可提高应用程序的性能。

    • 当调用需要指针的本机函数时,需要使用不安全代码。

    • 使用不安全代码将引起安全风险和稳定性风险。

    • 在 C# 中,为了编译不安全代码,必须用 /unsafe 编译应用程序。下面给个完整简单的例子:

    unsafe static int Sum(int* p)
            {
                return *p * (*p);
            }
            unsafe static void Main(string[] args)
            {
                int a = 5;
                Console.WriteLine(Sum(&a));
                Console.ReadKey();
            }
  • 相关阅读:
    计算机方向的一些顶级会议和期刊—Top Conferences and Journals in Computer Science
    jvm dns缓存问题解决方式
    eclipse调试过程中插入代码执行
    Spring Atomikos分布式事务
    spring quartz 注解配置定时任务
    web系统性能分析JavaMelody
    收集到几种开源NLP工具
    记录些实用的linux指令串
    javamelody对Java Application进行监控
    解决ssh连接问题1
  • 原文地址:https://www.cnblogs.com/czx1/p/5453594.html
Copyright © 2011-2022 走看看