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時,則視之為過小,為了降低額外負...