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