我想研究CLR內部的細節,其中一個可能聽起來很明顯的東西不適合我:如何從堆棧中刪除值類型?
如何從堆棧中清除值類型?
我明白GC清除堆棧中沒有地址的所有堆,但是我讀取它並不清除堆棧分配值類型。
有什麼想法?
我想研究CLR內部的細節,其中一個可能聽起來很明顯的東西不適合我:如何從堆棧中刪除值類型?
如何從堆棧中清除值類型?
我明白GC清除堆棧中沒有地址的所有堆,但是我讀取它並不清除堆棧分配值類型。
有什麼想法?
我不確定我是否理解你的問題,但我會盡力回答,並希望這會有所幫助。
通常,對於從堆棧清除值,有一個操作稱爲pop
。因此,要刪除值類型的值或引用類型的值,請將其彈出。反之亦然push
增加堆棧的價值。
(我寫了「一般」,因爲它正確的所有基於堆棧的數據結構,而不僅僅是CLR堆棧。)
,你需要明白的是一兩件事,不同之處在於堆棧堆,是不是通過壓縮內存區域來收集的,堆棧是預先分配的內存塊,並且在需要時將值插入並彈出。
如果你想知道堆棧內存如何看起來像是註冊使用等的確切細節,你可以在谷歌找到一些鏈接,但我不認爲你在找什麼。
通常,通過遞減堆棧指針寄存器中的值來執行堆棧分配。爲了釋放堆棧位置,堆棧指針遞增。增加或減少堆棧指針的字節數分別取決於要分配或釋放的變量的大小。 JIT編譯器根據需要發出機器指令來操作堆棧指針。
我不明白這個問題。 – user3344003
我認爲它涉及到:GC如何清除堆棧? – RollRoll
數值類型不會被GC跟蹤,除非它們被裝箱,此時它們不再是數值類型。這意味着他們不需要任何清理。 –