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