A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 闪电侠 于 2015-7-6 01:06 编辑

如意大师讲计算结构体变量在内存中占用字节数的时候,出现一个未知的问题:

  1. void test() {
  2.     struct A {
  3.         short a;  // 2
  4.         float f;  // 4
  5.         char c;   // 1
  6.         double d; // 8
  7.     };
  8.     struct A a;
  9.     printf("%zd", sizeof(a));
  10. }
复制代码

按照如意大师的算法,结果应该是16,可是实际上结果是24。至今未明白其原因。。。。谁能解释下,这个24是怎么算出来的???



1 个回复

倒序浏览
这可能与结构体中成员变量的数据类型有关,short\char可以看做整型数据,float\double是实数型数据,整型和实型不能一起吧,换句话说整型数和实型数不能放在一起来满足对齐问题。
请看下面这两个:
  1. struct A {
  2.         short a;  // 2
  3.         char c;   // 1
  4.         float f;  // 4
  5.         float d; // 4
  6.     };
  7.     struct A aa;
  8.     printf("%ld", sizeof(aa));
复制代码

它的结果是12。对齐模数是4,a,c一组,f一组,d一组,结果12。
  1. struct A {
  2.         short a;  // 2
  3.         float d; // 4
  4.         char c;   // 1
  5.         float f;  // 4
  6.     };
  7.     struct A aa;
  8.     printf("%ld", sizeof(aa));
复制代码

它的结果是16。对齐模数是4,a一组,b一组,c一组,d一组,结果16。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马