为什么sizeof在不同的IDE上返回不同的值
Why sizeof returns different value on different IDE?
为什么以下代码在代码块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_used
和end_allocated
中的一个或两个替换为类型为size_t
的成员。这个布局和硬件相关的sizeof(pointer)
和sizeof(size_t)
决定了sizeof(vector)
: std::vector<>
所使用的内存大小。
在32位系统上,sizeof(pointer)=sizeof(size_t)=4
和sizeof(vector)=12
是很常见的。
我想添加一些东西,不管vector
。即使int
在所有编译器(或者您所说的IDE)中也没有一个通用的大小。int
最小 4字节。所以,它可能更大。
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 架构决策:返回std::future还是提供回调
- 为什么这个C++程序在代码::块和在线 IDE 之间返回不同的结果?
- 如何调试正常运行但在 ide 中返回分段错误的程序?
- 为什么sizeof在不同的IDE上返回不同的值