参考:https://www.runoob.com/csharp/csharp-unsafe-codes.html
- 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] ;
}
网友评论