作為乙個山寨的stl,那麼不得不提的是其中的allocator(空間配置器)。顧名思義,它是負責空間分配用的,下面**十分簡單,僅對c函式malloc和free進行了薄薄的一層封裝,同時給定了自定義函式free_handler用於在空間分配時候由於記憶體被佔滿了而導致的分配失敗。
這裡值得注意的是:這個釋放函式的函式指標應該是由呼叫方來負責指定,並且它僅有乙個引數表明至少需要釋放多少位元組的記憶體。
下面來看**,**非常簡單,應此這裡就不逐一展開說明了。
template classallocator
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...