空 vector 和指向 vector 的指针相比,哪个的内存开销更大?
选项 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个指针:开始,结束和容量的结束,以及一个分配器)
然而应该注意到,指向向量的指针在非空情况下具有更大的开销:
NULL
,则不会构造向量,而使用选项A会默认构造一个向量。 - Christoph Wurm这完全取决于具体实现,你既不应该假设也不应该依赖于细节。值得一提的是,在使用 VC 时它占用了20字节。
std::vector v;
占用 sizeof(v)
的空间。这可能因实现而异,因此运行它并找出它对于您占用了多少空间。
#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字节。
VS2005:
std::vector<int> *ptrToVec = new std::vector<int>();
std::vector<int> vecOfInt;
sizeof(ptrToVec) = 4
sizeof(vecOfInt) = 20
谢谢!
具体实现取决于情况,可能需要一个指针和两个整数来表示当前大小和容量。