5

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

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

谢谢。

4

1 回答 1

6

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

因为这样做是有用且可取的,因此语言设计者选择允许这样做。

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

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

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

于 2016-05-14T21:06:40.257 回答