我正在用 C# 编写一些不安全的代码(跟进这个问题),我想知道,为什么stackalloc
关键字必须用作变量初始化器?例如,这将产生一个语法错误:
public unsafe class UnsafeStream
{
byte* buffer;
public UnsafeStream(int capacity)
{
this.buffer = stackalloc byte[capacity]; // "Invalid expression term 'stackalloc' / ; expected / } expected"
}
}
但是从本地临时重新分配结果不会:
public UnsafeStream(int capacity)
{
byte* buffer = stackalloc byte[capacity];
this.buffer = buffer;
}
为什么第一个版本不允许,如果我尝试第二个版本会发生什么邪恶的事情?