struct内存安排

处理器:AMD x64

操作系统:win7

编译器:GCC 4.8.1

该条件下,char---1byte   int---4bytes  double---8bytes


本内容为我试验得到,所以会因为不同的试验平台等,还有试验设想的条件不全而出现结果会有偏差。


结论:不考虑位域(位域就是可以以bit为单位精确指定位数)情况,struct里面的内存安排,会根据里面的最大基本存储类型为单位增加。

当增加一个单位后,后面的数据如果没有填满就不会增加存储大小。


下面举几个例子。


1.两个char

struct test

{

char c1;

char c2;

};

大小为2bytes


2.一个int,一个char

struct test

{

int i;

char c;

};

大小为8bytes


3.一个double,一个char

struct test

{

double d;

char c;

};

大小为16bytes


4.一个double,一个char,一个int

struct test

{

double d;

char c;

int i;

};

大小为16bytes


5.一个char,一个double,一个int

struct test

{

char c;

double d;

int i;

};

大小为24bytes


注:①由3和4对比可知,当分配了一个等于结构体之内最大基本类型的内存大小之后,后面的会先试着填满,当填满之后再增加结构体内存大小。

②由4和5对比可知,这个是与顺序有关的,首先结构体里面有double,所以最小分配8bytes。即使是char变量c

然后有一个double d,虽然还有7bytes没用,但是double需要8bytes,所以又分配8bytes

然后来一个int,所以再分配8bytes。

总共24bytes。


继续试验

6.一个自定义类型(包含2个double),一个char

class A

{

private;

double x;

double y;

}


struct test

{

A a;

char c;

}

大小为24bytes


7.一个double类型数组,一个char

struct test

{

double d[2] = {0.1, 0.2};

char c;

}

大小为24bytes


8.一个自定义类型(包含一个double,一个int),一个char

class A

{

private;

int x;

double y;

}


struct test

{

A a;

char c;

}

大小为24bytes,这个24bytes是不管class A中是先声明int还是double,也不管struct中是先声明class A,还是先声明char


注:①由后面的试验可知,虽然类或者符合结构作为一个整体是有很多字节,但是struct分配的最小内存空间仍然是以符合类型或者自定义类型中的最大基本类型为单位的。

②但是由于class类作为一个对象,分配了内存空间之后,其他对象是不会在它后面填充的了。




后续的试验:

1.类继承的情况。

2.c++标准容器的情况。

3.bool类型的情况。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值