计算class,struct,uion的sizeof(),struct与uion的区别

本文深入探讨了C++类中成员变量与虚函数的内存布局,详细解释了结构体、联合体的内存分配规则,并通过实例展示了如何计算不同数据类型在内存中的占用情况。
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;

//类中只有成员变量与虚函数参与计算
class A
{
public:
virtual void funa() ;//4个字节
virtual void funb() ;//4个字节
void fun() ;
static void fund() ;
static int si ;
A() ;
~A() ;
long a ;//4个字节,补齐8个字节
double d;//8个字节
private:
int i ;//4个字节
char c ;//补齐4个字节
};

//结构中字节不足要补齐
struct B
{
short  a;//2个字节,补齐有4个字节
long  b;//4个字节
double d ;//8个字节
long double dd ;//8个字节
char  c;//1个字节,补齐8个字节


}bb;

//union中字节取最大字节并是最小字节的最小倍数,且赋值过的变量的值是由最后一次赋值决定
union UI
{
short a; //2个字节;
long b ;//4个字节
double d ;//8个字节
char c[9] ;//9个字节
};

union C
{
short a; //2个字节;
long b ;//4个字节
double d ;//8个字节
char c[5] ;//5个字节
};
/*

union C
{
short a; //2个字节;
long b ;//4个字节
//double d ;//8个字节
char c[5] ;//5个字节
};
*/

int _tmain(int argc, _TCHAR* argv[])
{
int num[5] = {1,2,3,4,5} ;


cout<<"sizeof(A)="<<sizeof(A)<<endl ;//输出32
    cout<<"sizeof(B)="<<sizeof(B)<<endl ;//输出32 
    cout<<"sizeof(UI)="<<sizeof(UI)<<endl ;//输出16
cout<<"sizeof(C)="<<sizeof(C)<<endl ;//输出8
UI ui ;
ui.a = 11 ;
ui.b = 1 ;
cout<<"ui.a="<<ui.a<<",ui.b="<<ui.b <<endl;// 输出1 1

getch() ;
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值