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