c++中sizeof(结构体)

其值是多少,

第1个回答  2013-09-29
没有设置结构体对齐默认以4字节对齐,
没有成员变量为1;成员函数不计长度;成员变量不足4字节以4记,相邻小于4B的变量可以合占4B;大于4B的按4的倍数算
详细查找结构体对齐
http://blog.csdn.net/linphusen/article/details/6385211
第2个回答  2013-09-28
计算sizeof的规则大致如下:
1.空的class和struct大小为1. 如果在类和struct中有成员变量的话,就不考虑这个为空时的1.
2.如果class和struct中有成员变量,则计算方式是将成员变量对齐之后累加。各成员变量存放的 起始地址相对于起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。
3.继承的话则将父类的大小加入到本类中来。
4.如果类中有虚函数的话,则由于存在指向虚函数表的指针,需要加4。如果类中还有其他成员变量的话,则仍然需要对齐处理。
5.对齐处理,在有些编译环境下是按照占有空间的成员变量和虚函数的出现顺序来定,但在我这个环境下,是对齐后的最小大小。
6.如果子类中的有和父类中一样的虚函数的话。则一共占4.
代码如下:
#include<iostream>
using namespace std;
struct S1
{
};
struct S2
{
int a;
char b;
double c;
};
struct S3
{
double a;
int b;
char c;
};
struct S4
{
char a;
double b;
int c;
};
class C1
{
};
class C2
{
char a;
int b;
double c;
};
class C3
{
double a;
char b;
int c;
};
class C4:C1
{
int a;
};
class C5:C1
{
virtual void a();
};
class C6:C5
{
int c;
};
class C7:C5
{
virtual void a();
};
class C8:C5
{
virtual void a();
double b;
int c;
};
int main(int argc,char *argv[])
{
cout<<"sizeof(int):\t"<<sizeof(int)<<endl;
cout<<"sizeof(double):\t"<<sizeof(double)<<endl;
cout<<"sizeof(char):\t"<<sizeof(char)<<endl;
cout<<"sizeof(float):\t"<<sizeof(float)<<endl;
cout<<"sizeof(short):\t"<<sizeof(short)<<endl;
cout<<"sizeof(unsigned int):\t"<<sizeof(unsigned int)<<endl<<endl;
cout<<"sizeof(int *):\t"<<sizeof(int *)<<endl;
cout<<"sizeof(double *):\t"<<sizeof(double *)<<endl<<endl;
cout<<"sizeof(S1):\t"<<sizeof(S1)<<endl;
cout<<"sizeof(S2):\t"<<sizeof(S2)<<endl;
cout<<"sizeof(S3):\t"<<sizeof(S3)<<endl;
cout<<"sizeof(S4):\t"<<sizeof(S4)<<endl;
cout<<"sizeof(C1):\t"<<sizeof(C1)<<endl;
cout<<"sizeof(C2):\t"<<sizeof(C2)<<endl;
cout<<"sizeof(C3):\t"<<sizeof(C3)<<endl;
cout<<"sizeof(C4):\t"<<sizeof(C4)<<endl;
cout<<"sizeof(C5):\t"<<sizeof(C5)<<endl;
cout<<"sizeof(C6):\t"<<sizeof(C6)<<endl;
cout<<"sizeof(C7):\t"<<sizeof(C7)<<endl;
cout<<"sizeof(C8):\t"<<sizeof(C8)<<endl;
return 0;
}
运行结果如下:
sizeof(int): 4
sizeof(double): 8
sizeof(char): 1
sizeof(float): 4
sizeof(short): 2
sizeof(unsigned int): 4
sizeof(int *): 4
sizeof(double *): 4
sizeof(S1): 1
sizeof(S2): 16
sizeof(S3): 16
sizeof(S4): 16
sizeof(C1): 1
sizeof(C2): 16
sizeof(C3): 16
sizeof(C4): 4
sizeof(C5): 4
sizeof(C6): 8
sizeof(C7): 4
sizeof(C8): 16
本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-12/75896.htm

本篇文章来源于 Linux公社网站(www.linuxidc.com) 原文链接:http://www.linuxidc.com/Linux/2012-12/75896.htm
第3个回答  2013-09-29
看里面的数据类型了···· 每个数据类型的字节数 * 该数据类型的变量个数相加的和
相似回答