@askogorev

Sizeof(std::vector) =?

В std значение данной функции (для x32) sizeof(vector<int>) = 20

Вопрос - почему?

Мои догадки:
4 байта - указатель на начало массива
4 байта - указатель на позицию, в которую запишется следующий элемент (ну т.е. заполненность)
4 байта - указатель на конец выделенной памяти

Итого 12 байт. Откуда еще 8? Я так подозреваю там еще есть указатель на аллокатор, но это еще 4 байта

Где я ошибаюсь и чего не достает?
  • Вопрос задан
  • 4614 просмотров
Пригласить эксперта
Ответы на вопрос 3
@vbor
+_Vector_val::_Container_base::_Container_proxy _Myproxy;
+_Vector_val::_Alty _Alval;
Ответ написан
AxisPod
@AxisPod
Ну во первых вектор выделяет память с запасом. Так что скорее всего ему еще надо хранить кол-во зарезервированных элементов (всего) и кол-во добавленных элементов. А вообще откройте дебаггер и поглядите.
Ответ написан
bak
@bak
Это зависит от реализации stl. В stl, идущей в комплекте с gcc-4.6 на 32-х битной платформе sizeof(vector) равен 12-и, три указателя по 4 байта:
typename _Tp_alloc_type::pointer _M_start;
typename _Tp_alloc_type::pointer _M_finish;
typename _Tp_alloc_type::pointer _M_end_of_storage;

_M_start - начало выделенной памяти
_M_finish - последний вставленный элемент
_M_end_of_storage - конец выделенной памяти

В stl из visual studio на стеке так-же хранится аллокатор.
allocator_type _M_data_allocator;
_Tp* _M_start;
_Tp* _M_finish;
_Tp* _M_end_of_storage;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы