出于學習目的,我正在嘗試在堆記憶體中實作一個堆疊。
當我推送某些東西時,我只需要執行 systemcall sbrk,這很好。
當我繼續彈出時,我可以檢索我的值,但我無法釋放分配的空間。有沒有辦法做到這一點?
該sbrk系統呼叫不接受負數。我已經試過了。
uj5u.com熱心網友回復:
與sbrkUNIX 中的實際不同,QtSpim/MARS 系統呼叫 #9 不支持將記憶體從堆回傳到系統。
但是,您可以sbrk自己實作功能,因為它相當簡單。(malloc/free涉及自由串列等會更復雜,但這要簡單得多。)
當然,您需要一個像 real 一樣獲取調整數的子例程sbrk,并維護少量的持久/全域狀態 - 可能是兩個詞:UNIX 樣式的sbrk地址和 MARS 樣式的系統呼叫 #9 地址,或者,一個那些或其他的和一個免費的計數。
釋放記憶體(負sbrk引數)只是意味著將 UNIX 樣式的sbrk地址移回和/或增加空閑計數,否則什么也不做。
稍后的分配(正sbrk引數)在分配新堆空間時考慮標記或空閑計數之間的間隙,并且僅在空閑計數變為 0 并且分配請求中還有更多位元組時才增加底層 MARS 堆。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/406281.html
標籤:
