知道为什么stackalloc关键字接受可变长度吗?
如果此指令返回指向堆栈帧中分配的缓冲区的指针,编译器将如何管理它?每次调用它来组织堆栈帧时,它都会在运行时重新编译函数?
感谢
最佳答案
知道为什么stackalloc
关键字接受可变长度吗?
因为能够这样做是有用的和可取的,因此语言设计者选择允许这样做。
如果此指令返回指向堆栈帧中分配的缓冲区的指针,编译器将如何管理它?每次调用它来组织堆栈帧时,它都会在运行时重新编译函数?localalloc
指令在堆栈当前帧之后分配内存,而分配只是将地址存储回本地。因此:不必重新计算任何内容,只需更新堆栈帧的结尾,以便在调用另一个方法时不会覆盖它。
(注意:和往常一样,在讨论堆栈时,这实际上是一个实现细节;理论上,jit可以自由地从任何地方分配它,只要它尊重语义)