C#学习——不安全代码(指针)

定义:当一个代码块使用 unsafe 修饰符标记时,C# 允许在函数中使用指针变量。不安全代码或非托管代码是指使用了指针变量的代码块。

为什么“指针”是不安全代码?

由于C#中声明的变量在内存中的存储受垃圾回收器管理;因此一个变量(例如一个大数组)有可能在运行过程中被移动到内存中的其他位置。如果一个变量的内存地址会变化,那么指针也就没有意义了。

 

解决方法就是使用fixed关键字来固定变量位置不移动。

static unsafe void Main(string[] args)
{
  fixed(int *ptr = int[5])  {//...}
}

在unsafe不安全环境中,我们可以通过stackalloc在堆栈上分配内存,因为在堆栈上分配的内存不受内存管理器管理,因此其相应的指针不需要固定。

static unsafe void Main(string[] args)
{
  int *ptr = stackalloc int[1] ;
}

具体可以看:https://www.runoob.com/csharp/csharp-unsafe-codes.html

你可能感兴趣的:(.NET)