我在想如何實現STL std::vector
。STL向量的實現
確切地說,STL向量是否保存一個對象表或者指向對象的表?
實際執行過程中:最好是std::vector<char>
的大小約爲10^8
,或者有一個char
的數組?
第一個選項有明顯的優點:像其他所有容器一樣迭代,已知大小,自動內存管理,很難做出真正錯誤的事情。
第二個選項可能使用的空間減少了9倍(指針是64位,其中char
是8位),但代價是上面列出的所有舒適方法。
我看着 /usr/include/c++/4.8.2/bits/stl_vector.h ,看見push_back()
是如下實施,但即使檢查alloc_traits.h讓我不知道它是如何真正做。
類型char
僅用於顯示與所保持的值大小相比,指針的大小顯着。
我正在使用C++ 11。
void
push_back(const value_type& __x)
{
if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
{
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
__x);
++this->_M_impl._M_finish;
}
else
#if __cplusplus >= 201103L
_M_emplace_back_aux(__x);
#else
_M_insert_aux(end(), __x);
#endif
}
不,不持有指針的元素。具有10^8個元素的「矢量」將具有可忽略的簿記足跡。 –