raw os支援的記憶體分配種類

2021-08-27 09:38:00 字數 774 閱讀 9804

記憶體管理往往是乙個複雜的過程,raw os 目前支援5種記憶體分配方法,分別是block,byte,page,malloc,slab。以下會講解這5種基本原理以及適用場合。

這5種裡面只有block和slab 是沒有記憶體碎片的,其餘的都會有一定的記憶體碎片。這5種裡面只有block和byte能用於中斷內記憶體分配,推薦使用中斷內採用block記憶體分配。

block記憶體分配顧名思義是一塊塊的分配記憶體給使用者,每一塊的記憶體空間都是固定的,最大的好處是沒有記憶體碎片,而且速度很快,缺點是記憶體空間大小固定了不利於不確定大小的記憶體分配。實戰中可以分配多個不同大小的block去滿足變長的分配完全是可行的。強烈建議大部分情況用block去解決記憶體分配問題。

byte記憶體分配顧名思義是可以分配任何大小的位元組的記憶體給使用者,缺點是速度比較慢,而且有記憶體碎片,不建議對時間敏感的任務去使用,因為分配記憶體的速度比較慢,而且很可能時間是不恆定的,不利於實時任務。

page記憶體分配顧名思義是可以分配以page為單位的記憶體給使用者去使用,page的大小可以配置的,比如乙個page 2k或者4k大小。好處是使用者大記憶體分配的話很方便,速度也很快。壞處是可能存在page級別的記憶體碎片。

malloc記憶體分配是可以分配任意位元組的小的,和標準c庫的記憶體分配全部吻合。

slab記憶體分配也是基於一塊塊的分配給使用者,不過這一塊快的各自大小是不同的,很可能會分配多餘的記憶體空間給使用者,優點是速度快沒有記憶體碎片。缺點是可能會分配多餘的記憶體給使用者。

可以看到raw os 支援的記憶體種類繁多,從小級別的記憶體分配到大級別的記憶體分配應有盡有,在專案實戰中可以選擇最適合自己的策略去使用。

記憶體的分配

malloc 動態從記憶體中申請乙個空間 如果申請成功,將返回這個空間的首位址 通過乙個指標接受這個空間的首位址 int p p malloc sizeof int p 234 free p 釋放這個動態申請的空間 1.結構體的定義 struct 結構體名 struct npc 2.建立結構體變數 ...

記憶體的分配

需要使用 include include include 呼叫malloc函式所需的標頭檔案 intmain printf you number is n for i 0 i 1 不同機器對於各型別大小定義不同,因此最好使用sizeof 函式求型別大小 free 釋放引數指向的記憶體空間 函式原型 ...

C 高效能記憶體池,支援動態分配記憶體塊

在c c 中記憶體的管理是非常頭痛的事情,這裡作者不再多解釋,請參考這篇文章 作者也是參考這篇文章進行對記憶體池的改進和進化。1 封裝乙個類用於管理記憶體池的使用如下,很容易看得懂,其實就是向記憶體池申請size個空間並進行構造,返回是首個元素的位址。釋放也是一樣,不過釋放多個的時候需要確保這多個元...