山寨STL實現之allocator

2022-04-28 06:40:42 字數 874 閱讀 9909

作為乙個山寨的stl,那麼不得不提的是其中的allocator(空間配置器)。顧名思義,它是負責空間分配用的,下面**十分簡單,僅對c函式malloc和free進行了薄薄的一層封裝,同時給定了自定義函式free_handler用於在空間分配時候由於記憶體被佔滿了而導致的分配失敗。

這裡值得注意的是:這個釋放函式的函式指標應該是由呼叫方來負責指定,並且它僅有乙個引數表明至少需要釋放多少位元組的記憶體。

下面來看**,**非常簡單,應此這裡就不逐一展開說明了。

template class

allocator

allocator(

const allocator&)

static t*allocate()

return

result;

}static t*allocate(size_t n)

return

result;

}static

void deallocate(t*p)

static

void deallocate(t*p, size_t)

static t* reallocate(t*p, size_t old_size, size_t n)

return

result;

}public

:

static

void(*free_handler)(size_t);

static

void set_handler(void(*h)(size_t))

};template

typename

void (*allocator::free_handler)(size_t) = 0;

山寨STL實現之list

在stl中list是以雙向鍊錶的方式來儲存的,應此使用給定的下標值來找到對應的節點所需的時間複雜度為o n 相比vector直接使用原生指標會慢一些。因為是雙向鍊錶的關係,那麼必然有一種結構來表示鍊錶中的節點。template struct list node list node const t x...

山寨STL實現之vector

首先是vector的定義 template class vector 讓我們先來看看vector中的一些別名 public typedef t value type typedef t pointer typedef t reference typedef const t const referen...

山寨STL實現之記憶體池

記憶體池的作用 減少記憶體碎片,提高效能。首先不得不提的是win32和x64中對於指標的長度是不同的,在win32中乙個指標佔4位元組,而在x64中乙個指標佔8位元組。也正是不清楚這一點,當我在x64中將指標作為4位元組修改造成其他資料異常。首先我們先來定義三個巨集 define align siz...