为什么sizeof在不同的IDE上返回不同的值

Why sizeof returns different value on different IDE?

本文关键字:返回 IDE 为什么 sizeof      更新时间:2023-10-16

为什么以下代码在代码块13.12中返回12而在visual studio 2010中返回20 ?我也很困惑为什么它返回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);
}

因为sizeof运算符显示给定类型的对象表示的内存大小(以字节为单位)。考虑到vector容器不仅包含数据(可能有计数器,指针等),那么内存的确切大小取决于您正在使用的编译器的实现。

在你的情况下,有不同的编译器取决于所选择的IDE:

  • Visual c++ in Visual Studio
  • CodeBlocks中的MinGW(最有可能)

如果你想知道数据在你的vector中的确切大小(以字节为单位),那么你可以使用以下方法:

int vector_size = sizeof(int) * v.capacity();

这不是IDE的问题,而是编译器的问题。

无论如何,obj肯定不是大小为0的,因为它至少包含一个向量。一个空的vector只是不包含任何元素,但这并不意味着它使用的内存是0,它可能有一些隐藏的必要属性。

不同的大小可能是由于:不同的编译器使用不同的填充,以及不同的开发环境下向量的不同实现。

std::vector可以用不同的方式实现,但它们都需要三个数据成员。一种可能相当于

template<typename Tp>
class vector
{
  typedef Tp*pointer;
  pointer begin_memory, end_used, end_allocated;
};

对应sizeof(vector)=3*sizeof(pointer)。但是,也可以将end_usedend_allocated中的一个或两个替换为类型为size_t的成员。这个布局和硬件相关的sizeof(pointer)sizeof(size_t)决定了sizeof(vector): std::vector<>所使用的内存大小。

在32位系统上,sizeof(pointer)=sizeof(size_t)=4sizeof(vector)=12是很常见的。

我想添加一些东西,不管vector。即使int在所有编译器(或者您所说的IDE)中也没有一个通用的大小。int最小 4字节。所以,它可能更大。