STL 空間配置器

2021-09-19 08:49:04 字數 831 閱讀 6242

在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...