黑马程序员技术交流社区
标题: 昨天看到某帖子讨论结构体在堆里的存储细节 [打印本页]
作者: 蜡笔3285 时间: 2015-2-11 19:53
标题: 昨天看到某帖子讨论结构体在堆里的存储细节
大大们的解释我没怎么弄明白,又在网上查了查资料,然后自己试着总结了一下,请各位大大们看看我的理解对不对:① 结构体说白了,在存储之前会先根据结构体内部最长的数据类型来格式化自己的堆区,比如在一个包含double类型的结构体里,就是以8字节为单位存储的,但是长度小于8的类型会压缩存储,1字节的char类型可以8个压缩在一起放在一个8单元,4字节的int类型可以两个压缩在一起放在一个8单元,当然了,1个char类型和一个int类型也是可以压缩放在一个8单元的
② 最大长度为 int类型的,以4字节为单位,其他同上
③ 最大长度为char 的,以1字节为单位。
结论:结构体的大小是最大内部数据类型大小的倍数!
举例如下:
① 最大int,以4字节为单位
struct ss1{
int a; // 占一个单位
char b[9]; // 四个占一个单位,占满两个单位,还有一个单位占了一格
char c; // 可以继续放在上面的单位里
}s1;
总共占了4个单位,16字节
② 最大int,以4字节为单位
struct ss1{
char b[9]; // 占满两个单位,还有一个单位占了一格
char c; // 可以继续放在上面的盒子里
int a; // 占一个新的单位
}s1;
总共占了4个单位,16字节
③ 最大int,以4字节为单位
struct ss1{
char b[9]; // 占满两个单位,还有一个单位占了一格
int a; // 占一个新的单位
char c; / 也占一个新的单位
}s1;
总共占了5个单位,20字节
④ 最大double,以8字节为单位
struct ss2{
double d; // 8字节,占了一个单位
char b[9]; // 8字节,占了两个单位,一个满了,一个装了1个char
int a; // 上面不满的盒子还能放这个int
char c; // 这个char只能再占一个单位
}s2;
总共占了4个单位,32字节
⑤ 最大double,以8字节为单位
struct ss2{
char c; // 占了一个单位
double d; // 占了一个新的单位
char b[9]; // 占了两个单位,一个满了,一个装了1个char
int a; // 上面不满的盒子还能放这个int
}s2;
总共占了4个单位,32字节
这样理解到底对不对?
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |