STL配置器的記憶體分配策略

2021-06-29 04:43:57 字數 720 閱讀 1855

stl的幾個組成部分

1.容器:各種資料結構

2.演算法:各種常用演算法

3.迭代器:容器與演算法之間的聯合器,泛型指標

4.仿函式:協助演算法完成不同的策略的變化???

5.介面卡: 修飾或套接仿函式???

6.配置器:分配空間管理

配置器的記憶體空間管理策略:

一級配置器:對於大於128b的空間,使用一級配置器直接呼叫malloc

二級配置器:對於小的空間,維護乙個大小為8b-128b的freelist,有合適大小的就交付

優點:1小記憶體的分配效率提公升 2避免記憶體碎片化

接下來就有乙個引伸出的問題:malloc/free 做了什麼操作? c++的 new/delete 又與c的記憶體申請有什麼不同呢?

malloc原型:

void *malloc(int size);

向系統申請分配指定size個byte的記憶體空間。返回型別是 void* 型別,那麼就可以強轉任意型別了。

而new成了關鍵字,看看用法:

parr = new int [100];

比較可知malloc和new的不同了:

1.用new直接指定型別,而malloc得到個void*必須自己強轉一下,不然報錯。

2.用new獲取的空間不用計算大小,而malloc要用byte為單位自己換算一下。

STL記憶體管理器的分配策略

stl提供了很多泛型容器,如vector,list和map。程式設計師在使用這些容器時只需關心何時往容器內塞物件,而不用關心如何管理記憶體,需要用多少記憶體,這些stl容器極大地方便了c 程式的編寫。例如可以通過以下語句建立乙個vector,它實際上是乙個按需增長的動態陣列,其每個元素的型別為int...

STL記憶體管理器的分配策略

stl提供了很多泛型容器,如vector,list和map。程式設計師在使用這些容器時只需關心何時往容器內塞物件,而不用關心如何管理記憶體,需要用多少記憶體,這些stl容器極大地方便了c 程式的編寫。例如可以通過以下語句建立乙個vector,它實際上是乙個按需增長的動態陣列,其每個元素的型別為int...

STL的記憶體配置器分配例子

在stl中考慮到小型區塊所可能造成的記憶體破碎問題,sgi stl設計了雙層級配置器,第一級配置器直接使用malloc 和free 第二級配置器則視情況採用不同的策略 當配置區塊超過128bytes時,則視之為足夠大,便呼叫第一級配置器 當配置區塊小於128bytes時,則視之為過小,為了降低額外負...