拥有一个空向量与拥有一个指向向量的指针的内存开销是多少?
选项 A:
std::vector<int> v;
选项 B:
std::vector<int> *v = NULL;
我相信选项 B 需要 1 个 32 位指针(假设这里是 32 位)空的“v”占用多少内存?
至于所问的问题:这取决于实施。使用 MSVC 7.1:
std:: cout << sizeof(std::vector<int>) << std::endl;
给我 16(字节)。(3个指针:容量的开始、结束和结束,加上一个分配器)
但是应该注意的是,指向向量的指针给它带来了更大的开销:
它完全依赖于实现,您既不应该假设也不依赖于细节。值得的是使用 VC 的 20 字节。
std::vector v;
占用sizeof(v)
空间。它可能因实现而异,所以运行它并找出它需要多少。
VS2005:
std::vector<int> *ptrToVec = new std::vector<int>();
std::vector<int> vecOfInt;
sizeof(ptrToVec) = 4
sizeof(vecOfInt) = 20
谢谢!
在 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 个字节的向量指针。
依赖于实现,可能是一个指针和两个整数,用于当前大小和容量。