Chinaunix首页 | 论坛 | 博客
  • 博客访问: 436672
  • 博文数量: 89
  • 博客积分: 2713
  • 博客等级: 少校
  • 技术积分: 938
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-18 21:19
个人简介

为了成为自由自在的人而奋斗!

文章分类

全部博文(89)

文章存档

2016年(5)

2015年(9)

2014年(2)

2013年(10)

2012年(1)

2011年(30)

2010年(32)

分类: C/C++

2011-07-19 15:56:02

  1. /**
  2.  *
  3.  * 改变缺省的对界条件(指定对界)
  4.  * · 使用伪指令#pragma pack (n),C编译器将按照n个字节对齐。
  5.  * · 使用伪指令#pragma pack (),取消自定义字节对齐方式。
  6.  */
  7. #include <stdio.h>

  8. #define my_int(n) printf(#n" = %d\n", n)

  9. /* 默认按结构体中最大成员对齐 */
  10. typedef struct {
  11.     int a;
  12.     char b;
  13.     char c;
  14.     char d;
  15. }struct_t1;

  16. typedef struct {
  17.     char b;
  18.     int a;
  19.     char c;
  20.     char d;
  21. }struct_t2;

  22. typedef struct {
  23.     char b;
  24.     double a;
  25.     char c;
  26.     char d;
  27. }struct_t22;

  28. #pragma pack(2)
  29. typedef struct {
  30.     int a;
  31.     char b;
  32.     char c;
  33.     char d
  34. }struct_t3;

  35. typedef struct {
  36.     int a;
  37.     char b;
  38.     char c;
  39. }struct_t4;
  40. #pragma pack()
  41.     
  42. int main()
  43. {    
  44.     my_int(sizeof(struct_t1));
  45.     my_int(sizeof(struct_t2));
  46.     my_int(sizeof(struct_t22));
  47.     my_int(sizeof(struct_t3));
  48.     my_int(sizeof(struct_t4));
  49.     
  50.     return 0;
  51. }
 
 

另外,还有如下的一种方式:

· __attribute((aligned (n))),让所作用的结构成员对齐在n字节自然边界上。如果结构中有成员的长度大于n,则按照最大成员的长度来对齐。

· __attribute__ ((packed)),取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。


以上的n = 1, 2, 4, 8, 16... 第一种方式较为常见。

阅读(1694) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~