2017-05-04 125 views
0

我正在学习如何在C++中工作,并编写了一个示例程序来试图了解如何处理带有向量的内存。关于矢量内存存储

#include <iostream> 
#include <vector> 

int main() 
{ 

//Test 1: 
double n = 3.5; 
std::vector<double> test; 
std::cout << sizeof(test) << std::endl; 
test.push_back(n);  
std::cout << sizeof(test) << std::endl; 

std::cout << std::endl; 
    std::cout << std::endl; 
     std::cout << std::endl; 

//Test 2 


std::vector<int> test2; 
std::cout << sizeof(test2) << std::endl; 
for (int i = 0; i < 1000; i++) { 

test2.push_back(i); 

} 

std::cout << sizeof(test2) << std::endl; 
} 

有趣的是,程序打印出24个字节作为每次存储的字节数。尽管向矢量添加了新元素。当向矢量添加元素之后,最初声明的矢量占用的内存量如何?

回答

3

在内部,vector对象具有指向包含元素的动态分配内存的指针。当你使用sizeof(test)时,你只是得到包含指针的结构的大小,它指向的内存大小不包含在内。

该内存必须进行动态分配,以便向量可根据需要进行增减。类对象不可能改变其大小。

要获取数据存储使用的内存量,请使用sizeof(double) * test.capacity()