不安全代码

fixed关键字

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

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

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

stackalloc

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

static unsafe void Main(string[] args)
{
  int *ptr = stackalloc int[1] ;
}
posted on 2017-11-17 14:55  楚虾  阅读(153)  评论(0)    收藏  举报