how does vector work?

Currently, I am finding a bug related to meory allocated by vector. I have some findings about the mechanism of vector.

0. vector maintains 3 pointers: _M_start, _M_finish, and _M_end_of_storage. At first, vector is empty, i.e. _M_start= _M_finish= _M_end_of_storage=NULL.

invariant: elements are stored in [_M_start, _M_finish), while its storage/capacity is [_M_start, _M_end_of_storage).

1. A vector allocates a large number of memory, n*sizeof(Obj), by calling reserve(n). If its capacity, (char*)_M_end_of_storage-(char*)_M_start,  is less than n*sizeof(Obj), it will malloc another memory, and copy data before free its original storage.

2. Vector's iterator: a pointer in c++

vector's begin() points to _M_start; vector's end() points to _M_finish.

3.Vector's capacity is equal to (char*)_M_end_of_storage - (char*)_M_start

4. Vector's clear call destructor on each elements in [_M_start, _M_finish), not free memory at all.

5. ~Vector() frees memory by calling ~_Vector_base().

 

For more info, please refer to /usr/include/c++/4.1.2/bits/stl_vector.h

posted on 2013-05-28 20:29  Torstan  阅读(224)  评论(0编辑  收藏  举报

导航