空载体的开销是多少?

时间:2009-02-17 17:59:45

标签: c++ memory stl vector overhead

使用空向量与指向向量的指针有什么内存开销?

选项A:

std::vector<int> v;

选项B:

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

我相信选项B占用1 32位指针(假设这里是32位) 空'v'占用了多少内存?

6 个答案:

答案 0 :(得分:32)

至于问题:这取决于实施。使用MSVC 7.1:

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

给我16(字节)。 (3个指针:容量的开始,结束和结束,加上分配器)

然而应该注意到指向矢量的指针会给它带来更大的开销:

  • 在非空案例中的时间和空间
  • 在所有情况下的复杂性。

答案 1 :(得分:12)

它完全依赖于实现,你既不应该假设也不应该依赖于细节。对于使用VC的20字节是值得的。

答案 2 :(得分:5)

std::vector v;占用sizeof(v)个空格。它可能因实现而异,所以运行它并找出需要多少。

答案 3 :(得分:3)

VS2005:

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

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

谢谢!

答案 4 :(得分:3)

在Visual Studio Community 2017(版本15.2)中,运行此代码: #include&lt; iostream&gt; #include&lt; vector&gt; using namespace std; void main() {     矢量&lt;浮子&GT;测试;     vector&lt; float&gt; * test2 =&amp; test;     cout&lt;&lt; sizeof(test)&lt;&lt; &#34; \ n&#34 ;;     cout&lt;&lt; sizeof(test2)&lt;&lt; &#34; \ n&#34 ;;     cout&lt;&lt; &#34; \ n&#34 ;;     系统(&#34;暂停&#34); } 以32位(x86)运行,向量为16个字节,向量指针为4个字节。 以64位(x64)运行,向量为32字节,向量指向为8字节。

答案 5 :(得分:0)

依赖于实现,可能是当前大小和容量的指针和两个整数。