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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

结构名只能表示一个结构形式,编译系统并不会对它分配内存空间。只有当结构体变量被说明的时候,才会对该变量分配内存空间。结构体占用的内存空间为每个成员占用的字节数之后和,还要考虑内存对齐。

内存对齐:取结构体成员中占用最大的数据类型,每次分配内存按最大数来分配,最终占用的字节数必然是最大数的倍数。

  1. struct A{
  2.     int a;           //占用4个字节
  3.     float b;         //占用4个字节
  4.     char c;          //占用1个字节
  5. }
复制代码
每次按4个字节分配,这个结构体占用12个字节。

  1. struct A{
  2.     int a;           //占用4个字节
  3.     float b;         //占用4个字节
  4.     char c;          //占用1个字节
  5.     double d;        //占用8个字节
  6. }
复制代码
每次按8个字节分配,a分配8个字节,占用4个字节,由b去填充;c分配8个字节,占用1个字节,剩余7个字节;d占用8个字节,无法占用c剩下的,继续分配8个字节,总共是24个字节。有时候因为各个成员的先后顺序不一样,会影响占用的字节总数。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马