C++中类和结构体占空间大小的测试

一、环境

win10+vs2015免费版

二、结论

        以结构体中占用字节最大的类型为基础单元;然后从前往后开始挨个进行组合,不足一个基础单元则加上下一个,如果加上下一个类型超过基础单元大小,则之前的组合占一个基础单元(无论填不填满)。然后从下一个变量开始重新进行组合,以此类推,直到结束。

  1. 可以合理节省内存,有必要吗?;

  2. 指针占4个字节,(char*、double*) 也即是四个字节;

三、过程

1、环境下各种变量类型的大小

//环境下各种变量类型的大小
    cout << "sizeof(int):" << sizeof(int) << endl;
    cout << "sizeof(signed):" << sizeof(signed) << endl;
    cout << "sizeof(signed int):" << sizeof(signed int) << endl;
    cout << "sizeof(short):" << sizeof(short) << endl;
    cout << "sizeof(long):" << sizeof(long) << endl;
    cout << "sizeof(long long):" << sizeof(long long) << endl;
​
    cout << "sizeof(unsigned int):" << sizeof(unsigned int) << endl;
    cout << "sizeof(unsigned short):" << sizeof(unsigned short) << endl;
    cout << "sizeof(unsigned long):" << sizeof(unsigned long) << endl;
    cout << "sizeof(unsigned long long):" << sizeof(unsigned long long) << endl;
​
​
    cout << "sizeof(float):" << sizeof(float) << endl;
    cout << "sizeof(double):" << sizeof(double) << endl;
    cout << "sizeof(long double):" << sizeof(long double) << endl;
​
    cout << "sizeof(char):" << sizeof(char) << endl;
    cout << "sizeof(char16_t):" << sizeof(char16_t) << endl;
    cout << "sizeof(char32_t):" << sizeof(char32_t) << endl;
    cout << "sizeof(wchar_t):" << sizeof(wchar_t) << endl;
    cout << "sizeof(bool):" << sizeof(bool) << endl;
    cout << "sizeof(byte):" << sizeof(byte) << endl;

结果如下

类型大小
sizeof(int)4
sizeof(signed)4
sizeof(signed int)4
sizeof(short)2
sizeof(long)4
sizeof(long long)8
sizeof(unsigned int)4
sizeof(unsigned short)2
sizeof(unsigned long)4
sizeof(unsigned long long)8
sizeof(float)4
sizeof(double)8
sizeof(long double)8
sizeof(char)1
sizeof(char16_t)2
sizeof(char32_t)4
sizeof(wchar_t)2
sizeof(bool)1
sizeof(byte)1

2、验证结构体和类//编写7个结构体

struct mStur1   //12
{
    char a;
    short b;
    int c;
    int d;
};
struct mStur2   //16
{
    char a;
    short b;
    short b2;
    int c;
    int d;
};
struct mStur3   //12
{
    short a;
    short b;
    int c;
    int d;
};
struct mStur4   //16
{
    short a;
    int b;
    short c;
    int d;
};
struct mStur5   //16
{
    short a;
    int b;
    short c;
    char* d;
};
struct mStur6   //24    
{
    int a;
    double b;
    int c;
};
struct mStur7   //12
{
    int a;
    double* b;
    int c;
};
​
//求出大小
    cout << "sizeof(mStur1):" << sizeof(mStur1) << endl;//12
    cout << "sizeof(mStur2):" << sizeof(mStur2) << endl;//16
    cout << "sizeof(mStur3):" << sizeof(mStur3) << endl;//12
    cout << "sizeof(mStur4):" << sizeof(mStur4) << endl;//16
    cout << "sizeof(mStur5):" << sizeof(mStur5) << endl;//16
    cout << "sizeof(mStur6):" << sizeof(mStur6) << endl;//24
    cout << "sizeof(mStur7):" << sizeof(mStur7) << endl;//12
//结果
//sizeof(mStur1):12
//sizeof(mStur2):16
//sizeof(mStur3):12
//sizeof(mStur4):16
//sizeof(mStur5):16
//sizeof(mStur6):24
//sizeof(mStur7):12
//把结构体换成类之后的结果,发现是一样的!
sizeof(mClas1):12
sizeof(mClas2):16
sizeof(mClas3):12
sizeof(mClas4):16
sizeof(mClas5):16
sizeof(mClas6):24
sizeof(mClas7):12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值