黑马程序员技术交流社区
标题:
关于计算结构体变量在内存中占用字节数的疑惑
[打印本页]
作者:
闪电侠
时间:
2015-7-6 01:06
标题:
关于计算结构体变量在内存中占用字节数的疑惑
本帖最后由 闪电侠 于 2015-7-6 01:06 编辑
如意大师讲计算结构体变量在内存中占用字节数的时候,出现一个未知的问题:
void test() {
struct A {
short a; // 2
float f; // 4
char c; // 1
double d; // 8
};
struct A a;
printf("%zd", sizeof(a));
}
复制代码
按照如意大师的算法,结果应该是16,可是实际上结果是24。至今未明白其原因。。。。谁能解释下,这个24是怎么算出来的???
作者:
984326157
时间:
2015-7-6 01:35
这可能与结构体中成员变量的数据类型有关,short\char可以看做整型数据,float\double是实数型数据,整型和实型不能一起吧,换句话说整型数和实型数不能放在一起来满足对齐问题。
请看下面这两个:
struct A {
short a; // 2
char c; // 1
float f; // 4
float d; // 4
};
struct A aa;
printf("%ld", sizeof(aa));
复制代码
它的结果是12。对齐模数是4,a,c一组,f一组,d一组,结果12。
struct A {
short a; // 2
float d; // 4
char c; // 1
float f; // 4
};
struct A aa;
printf("%ld", sizeof(aa));
复制代码
它的结果是16。对齐模数是4,a一组,b一组,c一组,d一组,结果16。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2