• C#不安全代码和指针


    从通常情况下来看,为了保持类型安全,默认情况C# 不支持指针算法。

    不过,当你需要使用指针的时候,请通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文。 有关指针的更多信息,请参见主题指针类型

    说明 说明

    在公共语言运行时 (CLR) 中,不安全代码是指无法验证的代码。 C# 中的不安全代码不一定是危险的;只是其安全性无法由 CLR 进行验证的代码。 因此,CLR 只对在完全受信任的程序集中的不安全代码执行操作。 如果使用不安全代码,由您负责确保您的代码不会引起安全风险或指针错

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

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

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

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

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

    • 在 C# 中,为了编译不安全代码,必须用 /unsafe 编译应用程序。

    unsafe 关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。 有关更多信息,请参见 不安全代码和指针(C# 编程指南)

    可以在类型或成员的声明中使用 unsafe 修饰符。 因此,类型或成员的整个正文范围均被视为不安全上下文。 例如,以下是用 unsafe 修饰符声明的方法:

     
    unsafe static void FastCopy(byte[] src, byte[] dst, int count)
    {
        // Unsafe context: can use pointers here.
    }

    不安全上下文的范围从参数列表扩展到方法的结尾,因此指针在以下参数列表中也可以使用:

     
    unsafe static void FastCopy ( byte* ps, byte* pd, int count ) {...}

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

     
     
    unsafe
    {
        // Unsafe context: can use pointers here.
    }

    若要编译不安全代码,必须指定 /unsafe 编译器选项。 无法通过公共语言运行时验证不安全代码。

    在 Visual Studio 开发环境中设置此编译器选项

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

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

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

    有关如何以编程方式设置此编译器选项的信息,请参见 AllowUnsafeBlocks

    编译不安全模式的 in.cs:

    csc /unsafe in.cs
    
    class UnsafeTest
        {
           // Unsafe method: takes pointer to int:
           unsafe static void SquarePtrParam(int* p)
           {
              *p *= *p;
           }
    
           unsafe static void Main()
           {
              int i = 5;
              // Unsafe method: uses address-of operator (&):
              SquarePtrParam(&i);
              Console.WriteLine(i);
           }
        }
        // Output: 25
  • 相关阅读:
    Python 数字数据类型
    Python 标准数据类型
    Python 变量类型及变量赋值
    Python 基础语法
    ElasticStack系列之五 & 当前的缺陷与不足
    ElasticStack系列之四 & 索引后半段过程
    ElasticStack系列之三 & 索引前半段过程
    ElasticStack系列之二 & ElasticStack整体架构
    ElasticStack系列之一 & ElasticStack基础概念
    c# 获取本机IP
  • 原文地址:https://www.cnblogs.com/2Yous/p/4887904.html
Copyright © 2020-2023  润新知