C++ 空向量的间接成本是多少?

C++ 空向量的间接成本是多少?,c++,memory,stl,vector,overhead,C++,Memory,Stl,Vector,Overhead,有一个空向量与有一个指向向量的指针相比,内存开销是多少 备选方案A: std::vector<int> v; std::vector v; 备选案文B: std::vector<int> *v = NULL; std::vector*v=NULL; 我相信选项B采用1个32位指针(此处假设为32位) 空的“v”占用多少内存?取决于实现,可能是一个指针和两个整数,表示当前大小和容量。std::vector v占用sizeof(v)空间。它可能因实现的不同而有所不同,

有一个空向量与有一个指向向量的指针相比,内存开销是多少

备选方案A:

std::vector<int> v;
std::vector v;
备选案文B:

std::vector<int> *v = NULL;
std::vector*v=NULL;
我相信选项B采用1个32位指针(此处假设为32位)
空的“v”占用多少内存?

取决于实现,可能是一个指针和两个整数,表示当前大小和容量。

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

它完全依赖于实现,您不应该假设也不应该依赖细节。对于它的价值,使用VC需要20个字节。

至于所问的问题:它取决于实现。在MSVC 7.1中,这:

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

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

sizeof(ptrToVec) = 4
sizeof(vecOfInt) = 20
std::vector*ptrToVec=new std::vector();
向量向量;
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");
}
#包括
#包括
使用名称空间std;
void main()
{
病媒试验;
向量*test2=&test;

那么向量内部使用的动态内存呢?默认构造的向量没有大小,也从来没有大小,因此它应该没有动态分配。很高兴知道你在这个问题上想得到什么。你是否希望创建一个向量数组,并想知道通过将其设置为点数组可以节省多少空间ers?如果是这样,可能还有一些其他问题您应该知道。@Legate:因为您必须将指针本身的大小添加到向量@ricMalenfant:的大小中,但是如果初始化为
NULL
,如问题的选项B,则不会构造向量,而使用选项A,则会默认构造向量。@Legate:Yes、 这就是为什么我写了“在非空情况下”结尾指针不是存储的,而是在运行时计算的:
begin()+size()
@Michael Smith:实现可以选择存储大小和计算结束,反之亦然。重要的是它取决于实现。在GCC 4.6中,它是12个字节。我假设指针为4个字节,大小为4个字节,容量为4个字节。