4
任何想法爲什麼'stackalloc'關鍵字接受可變長度?爲什麼stackalloc接受可變長度?
如果該指令返回一個指向堆棧的幀中分配的緩衝區,編譯器如何管理?每次調用堆棧框架時,它都會在運行時重新編譯函數?
謝謝。
任何想法爲什麼'stackalloc'關鍵字接受可變長度?爲什麼stackalloc接受可變長度?
如果該指令返回一個指向堆棧的幀中分配的緩衝區,編譯器如何管理?每次調用堆棧框架時,它都會在運行時重新編譯函數?
謝謝。
任何想法爲什麼
stackalloc
關鍵字接受可變長度?
因爲能夠這樣做是有用的和理想的,因此語言設計者選擇允許它。
如果此指令返回一個指向堆棧幀中分配的緩衝區的指針,編譯器如何管理它?每次調用堆棧框架時,它都會在運行時重新編譯函數?
的localalloc
指令後分配內存堆疊當前幀和分配正義的存儲地址返回到本地。因此:除了更新堆棧幀的末尾以外,如果我們調用另一個方法,它不會被重寫,所以不需要重新計算任何內容。
(注:像往常一樣討論棧的時候,其實這是一個實現細節;在JIT在理論上可以自由地做任何地方分配它就是了,只要尊重語義)
有趣,但由於存在最小保留堆棧大小(IIRC),我猜JIT將在運行時進行分配。 – leppie
爲什麼需要重新編譯函數?堆棧分配只需要移動堆棧指針。 –
@leppie嗯,和一個大於這個保留堆棧大小的緩衝區呢? ; x – ptr0x