设为首页 加入收藏

TOP

C语言结构体的对齐原则(一)
2014-07-19 22:53:18 来源: 作者: 【 】 浏览:236
Tags:语言 结构 原则

  Q:关于结构体的对齐,到底遵循什么原则

  A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况:

  #include

  #include

  #define PRINT_D(intValue) printf(#intValue" is %d\n", (intValue));

  #define OFFSET(struct,member) ((char *)&((struct *)0)->member - (char *)0)

  #pragma pack(1)

  typedef struct

  {

  char sex;

  short score;

  int age;

  }student;

  int main()

  {

  PRINT_D(sizeof(student))

  PRINT_D(OFFSET(student,sex))

  PRINT_D(OFFSET(student,score))

  PRINT_D(OFFSET(student,age))

  return 0;

  }

  输出:

  sizeof(student) is 7

  OFFSET(student,sex) is 0

  OFFSET(student,score) is 1

  OFFSET(student,age) is 3

  可以看到,如果按1字节对齐,那么结构体内部的成员紧密排列,sizeof(char) == 1, sizeof(short) == 2, sizeof(int) == 4.

  修改上面的代码, 去掉#pragma pack语句,代码如下:

  #include

  #include

  #define PRINT_D(intValue) printf(#intValue" is %d\n", (intValue));

  #define OFFSET(struct,member) ((char *)&((struct *)0)->member - (char *)0)

  typedef struct

  {

  char sex;

  short score;

  int age;

  }student;

  int main()

  {

  PRINT_D(sizeof(student))

  PRINT_D(OFFSET(student,sex))

  PRINT_D(OFFSET(student,score))

  PRINT_D(OFFSET(student,age))

  return 0;

  }

  运行结果:

  sizeof(student) is 8

  OFFSET(student,sex) is 0

  OFFSET(student,score) is 2

  OFFSET(student,age) is 4

   

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言字符串学习理解 下一篇程序的栈区(stack)堆区(heap)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)