2016-05-14 83 views
4

任何想法为什么'stackalloc'关键字接受可变长度?为什么stackalloc接受可变长度?

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

谢谢。

+0

有趣,但由于存在最小保留堆栈大小(IIRC),我猜JIT将在运行时进行分配。 – leppie

+0

为什么需要重新编译函数?堆栈分配只需要移动堆栈指针。 –

+0

@leppie嗯,和一个大于这个保留堆栈大小的缓冲区呢? ; x – ptr0x

回答

5

任何想法为什么stackalloc关键字接受可变长度?

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

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

localalloc指令后分配内存堆叠当前帧和分配正义的存储地址返回到本地。因此:除了更新堆栈帧的末尾以外,如果我们调用另一个方法,它不会被重写,所以不需要重新计算任何内容。

(注:像往常一样讨论栈的时候,其实这是一个实现细节;在JIT在理论上可以自由地做任何地方分配它就是了,只要尊重语义)

相关问题