4
任何想法为什么'stackalloc'关键字接受可变长度?为什么stackalloc接受可变长度?
如果该指令返回一个指向堆栈的帧中分配的缓冲区,编译器如何管理?每次调用堆栈框架时,它都会在运行时重新编译函数?
谢谢。
任何想法为什么'stackalloc'关键字接受可变长度?为什么stackalloc接受可变长度?
如果该指令返回一个指向堆栈的帧中分配的缓冲区,编译器如何管理?每次调用堆栈框架时,它都会在运行时重新编译函数?
谢谢。
任何想法为什么
stackalloc
关键字接受可变长度?
因为能够这样做是有用的和理想的,因此语言设计者选择允许它。
如果此指令返回一个指向堆栈帧中分配的缓冲区的指针,编译器如何管理它?每次调用堆栈框架时,它都会在运行时重新编译函数?
的localalloc
指令后分配内存堆叠当前帧和分配正义的存储地址返回到本地。因此:除了更新堆栈帧的末尾以外,如果我们调用另一个方法,它不会被重写,所以不需要重新计算任何内容。
(注:像往常一样讨论栈的时候,其实这是一个实现细节;在JIT在理论上可以自由地做任何地方分配它就是了,只要尊重语义)
有趣,但由于存在最小保留堆栈大小(IIRC),我猜JIT将在运行时进行分配。 – leppie
为什么需要重新编译函数?堆栈分配只需要移动堆栈指针。 –
@leppie嗯,和一个大于这个保留堆栈大小的缓冲区呢? ; x – ptr0x