Подтвердить что ты не робот

Какова накладная стоимость пустого вектора?

Какова накладная память из-за наличия пустого вектора vs с указателем на вектор?

Вариант A:

std::vector<int> v;

Вариант B:

std::vector<int> *v = NULL;

Я считаю, что опция B принимает 1 32-битный указатель (предполагается, что здесь 32 бит) Сколько памяти занимает пустое "v"?

4b9b3361

Ответ 1

Что касается заданного вопроса: это зависит от реализации. С MSVC 7.1 это:

std:: cout << sizeof(std::vector<int>) << std::endl;

дает мне 16 (байтов). (3 указателя: начало, конец и конец емкости плюс распределитель)

Однако следует отметить, что указатель на вектор дает ему большие накладные расходы:

  • как во времени, так и в пространстве в непустом случае
  • по сложности во всех случаях.

Ответ 2

Это полностью зависит от реализации, и вы не должны ни предполагать, ни полагаться на детали. Для чего он стоит 20 байтов с помощью VC.

Ответ 3

std::vector v; занимает пространство sizeof(v). Это может варьироваться в зависимости от реализации, поэтому запустите его и узнайте, сколько вам потребуется.

Ответ 4

VS2005:

std::vector<int> *ptrToVec = new std::vector<int>();
std::vector<int> vecOfInt;

sizeof(ptrToVec) = 4
sizeof(vecOfInt) = 20

Спасибо!

Ответ 5

В Visual Studio Community 2017 (версия 15.2), запустив этот код:

#include <iostream>
#include <vector>

using namespace std;

void main()
{
    vector<float> test;
    vector<float>* test2 = &test;
    cout << sizeof(test) << "\n";
    cout << sizeof(test2) << "\n";

    cout << "\n";
    system("pause");
}

Запуск в 32 бит (x86), я получаю 16 байтов для вектора и 4 байта для векторного указателя.

Запуск в 64 бит (x64), я получаю 32 байта для вектора и 8 байтов для векторного указателя.

Ответ 6

Зависит от реализации, возможно, указатель и два целых числа для текущего размера и емкости.