在c/c++中程式設計師要申請空間通過malloc從堆上申請空間,這樣頻繁操作會有一些大的問題產生
記憶體碎片
外部碎片
二級空間配置器
enum // 使用者所需記憶體不是8的整數倍,就向上對其到8的整數倍
enum // 大小塊記憶體的分界
enum // 使用雜湊桶儲存時雜湊桶的個數
static size_t round_up(size_t bytes)
union obj ; // 使用聯合體維護鍊錶結構
// 當乙個記憶體塊空閒時,就再乙個記憶體塊中使用四個位元組強制以這個obj連線到下乙個空閒塊,
//當記憶體塊交付給使用者時,就直接儲存使用者資料
// 根據使用者提供位元組數找到對應桶號
static size_t freelist_index(size_t bytes)
//記憶體池中大記憶體的起始終止位置
static char* start_free;
static char* end_free;
//記錄空間配置器向系統中索要了多少的記憶體
static size_t heap_size;
二級空間配置器的**static void deallocate(void* p, size_t n)
// 找到對應雜湊桶, 直接掛在雜湊桶中
my_free_list = free_list + freeelist_index(n);
q->free_list_link = *my_free_list;
*my_free_list = q;
}
STL 空間配置器
stl有6大元件 容器 演算法 迭代器 仿函式 配接器 分配器。它們之間的密切關係是stl的精髓所在,容器用來存放資料,而容器存在的前提是要有分配器給它分配記憶體,接下來需要實現演算法,迭代器便作為演算法來對容器資料操作的橋梁,演算法可以使用仿函式完成不同的策略變化,配接器可修飾或套接仿函式。說了麼...
STL 空間配置器
stl空間配置器的底層原理 維護了乙個狹義的記憶體池,並且用乙個自由鍊錶來維護該記憶體池。該自由鍊錶比較類似於雜湊的開鏈法的儲存結構。源 pragma once using namespace std define throw bad alloc cerr out of memory endl ex...
STL空間配置器
一級空間配置器 ifndef malloc alloc template h define malloc alloc template h if 0 include define throw bad alloc throw bad alloc elif defined throw bad alloc...