获取向量的字节大小[重复]

Posted

技术标签:

【中文标题】获取向量的字节大小[重复]【英文标题】:Getting the size in bytes of a vector [duplicate] 【发布时间】:2013-06-22 19:18:09 【问题描述】:

很抱歉这个可能简单而愚蠢的问题,但我在任何地方都找不到。

我只是不知道如何获取 std::vector 的字节大小。

std::vector<int>MyVector;   
/* This will print 24 on my system*/   
std::cout << "Size of  my vector:\t" << sizeof(MyVector) << std::endl;

for(int i = 0; i < 1000; i++)
   MyVector.push_back(i);

/* This will still print 24...*/    
std::cout << "Size of  my vector:\t" << sizeof(MyVector) << std::endl;

那么我如何获得向量的大小?!也许通过将 24(向量大小)乘以项目数?

【问题讨论】:

您是指所有项目的总大小(以字节为单位)吗?加上向量本身的大小? 我想知道我的记忆占用了多少空间。所以是的。 【参考方案1】:

Vector 将其元素存储在内部分配的内存数组中。你可以这样做:

sizeof(std::vector<int>) + (sizeof(int) * MyVector.size())

这将为您提供向量结构本身的大小加上其中所有整数的大小,但它可能不包括您的内存分配器可能施加的任何小开销。我不确定是否有一种独立于平台的方式来包含它。

【讨论】:

sizeof(MyVector) + (sizeof(MyVector[0]) * MyVector.size())` 会不会更好,因为这样可以更有效地防止MyVector 变成,比如说, std::vector&lt;long int, customAllocator&lt;long int&gt;&gt;? sizeof(std::vector) 是什么意思?【参考方案2】:

您可能不想知道向量的大小(以字节为单位),因为向量是一个独立于内容的重要对象,它位于动态内存中。

std::vector<int> v  1, 2, 3 ;  // v on the stack, v.data() in the heap

您可能想知道的是数据的大小,即存储向量当前内容所需的字节数。为此,您可以使用

template<typename T>
size_t vectorsizeof(const typename std::vector<T>& vec)

    return sizeof(T) * vec.size();

或者你可以这样做

size_t bytes = sizeof(vec[0]) * vec.size();

【讨论】:

sizeof 在编译时进行评估。 vec[0] 计算为 vec.operator [] 的返回类型【参考方案3】:

向量的大小分为两个主要部分,容器实现本身的大小,以及其中存储的所有元素的大小。

要获取容器实现的大小,您可以执行当前的操作:

sizeof(std::vector<int>);

要获取其中存储的所有元素的大小,您可以这样做:

MyVector.size() * sizeof(int)

然后将它们加在一起得到总大小。

【讨论】:

“我想知道它占用了我多少内存” -> 向量有“容量()”元素 如上所述,我认为sizeof(MyVector[0])sizeof(int) 更好,因为如果您更改MyVector 的类型,那将保持正确。

以上是关于获取向量的字节大小[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何重新调整多维向量的大小? C++ [重复]

C ++创建一个向量大小的数组,然后将向量复制到C样式数组中[重复]

R从n个元素的字符向量中生成大小为m的所有可能组合[重复]

内存分配“错误:无法分配大小为 75.1 Mb 的向量”[重复]

千兆字节大小文件的文本编辑器[重复]

CUDA线程分配[重复]