为什么stackalloc接受可变长度?

ded*_*cos 5 c# pointers low-level stackalloc

知道为什么'stackalloc'关键字接受可变长度?

如果该指令返回指向堆栈帧中分配的缓冲区的指针,编译器如何管理它?每次调用它来组织堆栈帧时,它都会在运行时重新编译该函数?

谢谢.

Mar*_*ell 6

知道为什么stackalloc关键字接受变量长度?

因为能够这样做是有用和可取的,因此语言设计者选择允许它.

如果该指令返回指向堆栈帧中分配的缓冲区的指针,编译器如何管理它?每次调用它来组织堆栈帧时,它都会在运行时重新编译该函数?

该localalloc指令在堆栈当前帧之后分配内存,并且赋值仅将地址存储回本地.因此:没有必要重新计算任何东西,除了更新堆栈帧的结尾,以便在我们调用另一个方法时不会被覆盖.

(注意:通常在讨论堆栈时,这实际上是一个实现细节; JIT理论上可以自由地从它想要的任何地方分配它,只要它尊重语义)