2016-05-14 69 views
4

任何想法爲什麼'stackalloc'關鍵字接受可變長度?爲什麼stackalloc接受可變長度?

如果該指令返回一個指向堆棧的幀中分配的緩衝區,編譯器如何管理?每次調用堆棧框架時,它都會在運行時重新編譯函數?

謝謝。

+0

有趣,但由於存在最小保留堆棧大小(IIRC),我猜JIT將在運行時進行分配。 – leppie

+0

爲什麼需要重新編譯函數?堆棧分配只需要移動堆棧指針。 –

+0

@leppie嗯,和一個大於這個保留堆棧大小的緩衝區呢? ; x – ptr0x

回答

5

任何想法爲什麼stackalloc關鍵字接受可變長度?

因爲能夠這樣做是有用的和理想的,因此語言設計者選擇允許它。

如果此指令返回一個指向堆棧幀中分配的緩衝區的指針,編譯器如何管理它?每次調用堆棧框架時,它都會在運行時重新編譯函數?

localalloc指令後分配內存堆疊當前幀和分配正義的存儲地址返回到本地。因此:除了更新堆棧幀的末尾以外,如果我們調用另一個方法,它不會被重寫,所以不需要重新計算任何內容。

(注:像往常一樣討論棧的時候,其實這是一個實現細節;在JIT在理論上可以自由地做任何地方分配它就是了,只要尊重語義)

相關問題