Какова накладная стоимость пустого вектора?
Какова накладная память из-за наличия пустого вектора vs с указателем на вектор?
Вариант A:
std::vector<int> v;
Вариант B:
std::vector<int> *v = NULL;
Я считаю, что опция B принимает 1 32-битный указатель (предполагается, что здесь 32 бит)
Сколько памяти занимает пустое "v"?
Ответы
Ответ 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
Зависит от реализации, возможно, указатель и два целых числа для текущего размера и емкости.