33

拥有一个空向量与拥有一个指向向量的指针的内存开销是多少?

选项 A:

std::vector<int> v;

选项 B:

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

我相信选项 B 需要 1 个 32 位指针(假设这里是 32 位)空的“v”占用多少内存?

4

6 回答 6

34

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

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

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

但是应该注意的是,指向向量的指针给它带来了更大的开销:

  • 在非空情况下的时间和空间
  • 在所有情况下的复杂性。
于 2009-02-17T18:09:55.653 回答
13

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

于 2009-02-17T18:07:23.850 回答
5

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

于 2009-02-17T18:03:49.147 回答
3

VS2005:

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

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

谢谢!

于 2009-02-17T18:25:57.270 回答
3

在 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 个字节的向量指针。

于 2017-07-08T00:06:13.440 回答
0

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

于 2009-02-17T18:03:27.497 回答