• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
renbob
博客园    首页    新随笔    联系   管理    订阅  订阅

结构体内存小析

//  对齐 : 结构体中各成员变量要从自身类型所占内存空间长度的倍数开始存储。大于4个字节的按4个字节算

//  对齐也就是:  结构体中前一个类型的变量补的位数要根据它后面的变量类型来判定!

 

//  补齐 : 在结构体存储空间的尾端要按结构体所占空间最大的成员变量的所占空间长度的倍数来补上。大于4个字节的按4个字节算。

// 补齐也就是:   结构体的最后的长度要根据结构体中最大成员变量的数据类型来判断,前者必须是后者的整数倍

 

//  for example :

 1 #include <stdio.h>
 2 typedef struct test {
 3     char name[18];
 4     int word;
 5     char bit;
 6     double number;
 7     short age;
 8 
 9 } mix;
10 
11 int main () {
12     mix hello;
13     int n = sizeof (n);
14     printf("%d \n", n);                 //      结果是     48
15     return 0;
16 }

 

As we have expected, the result is 48, well, how could we get it ? Now let us explain it    :

分步解析 :

// 1:  name[18]  -> 18 bytes            0 - 18      ->20

// 2:  word         -> 4  bytes            20 - 24

// 3:  bit             -> 1  bytes            24 - 25     ->32

// 4: number      -> 8  bytes            32 - 40

// 5: age             -> 2  bytes            40 - 42

// 6:   最大字节数是 8(数组是char类型的,字节数为1), 而最后的结构体长度要是最大字节数的整数倍,所以补位到48

 

posted @ 2015-04-26 20:55  renbob  阅读(148)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3