为什么以下代码在visual studio 2010中的代码块13.12和20中返回12?我也很困惑为什么它返回任何其他值而不是0因为向量是动态的并且我没有推回任何元素。
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <vector>
using namespace std;
class c
{
public:
vector<int>v;
c()
{
v.clear();
}
};
int main() {
int m;
c ob;
cout<< sizeof(ob);
}
答案 0 :(得分:2)
因为sizeof
运算符显示给定类型的对象表示的内存大小(以字节为单位)。考虑到vector
容器不仅包含数据(可能有计数器,指针等),那么内存中的确切大小取决于您正在使用的编译器中的实现。
在您的情况下,有不同的编译器依赖于所选择的IDE:
如果您想知道vector
中数据的确切大小(以字节为单位),那么您可以使用以下方法:
int vector_size = sizeof(int) * v.capacity();
答案 1 :(得分:1)
这不是IDE的问题,而是编译器的问题。
无论如何,obj
肯定不是0的大小,因为它至少包含一个向量。空vector
根本不包含任何元素,但这并不意味着它使用的内存为0,它可能有一些隐藏的必要属性。
不同的大小可能是由于:不同编译器应用的填充不同,以及不同开发环境中矢量的不同实现。
答案 2 :(得分:0)
std::vector
可以用不同的方式实现,但所有这些都需要三个数据成员。一种可能性相当于
template<typename Tp>
class vector
{
typedef Tp*pointer;
pointer begin_memory, end_used, end_allocated;
};
对应sizeof(vector)=3*sizeof(pointer)
。但是,您也可以使用end_used
类型的成员替换end_allocated
和size_t
中的一个或两个。此布局和依赖于硬件的sizeof(pointer)
和sizeof(size_t)
确定sizeof(vector)
:std::vector<>
使用的内存大小。
在32位系统上,通常会有sizeof(pointer)=sizeof(size_t)=4
,因此sizeof(vector)=12
。
答案 3 :(得分:0)
无论vector
如何,我想添加一些内容。甚至int
在所有编译器(或称为IDE)中都没有通用的大小。
int
至少 4个字节。所以,它可能更大。