Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398943
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: LINUX

2016-03-20 22:54:46

1、 __attribute__ ((packed))的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。
2、 __attribute__ ((aligned(n)))的作用就是告诉编译器在编译过程中按照n字节对齐。常常用来在结构体后面进行修饰。

下面通过一段代码来进行测试

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. /*编译器默认是4字节对齐*/
  3. struct test{
  4.     char a;
  5.     int b;
  6. };

  7. /*按实际占用的空间大小*/
  8. struct test1{
  9.     char a;
  10.     int b;
  11. }__attribute__((packed));

  12. /*结构体大小必须4字节对齐*/
  13. struct test2{
  14.     char a;
  15.     int b;
  16. }__attribute__((aligned(4)));

  17. /*结构体大小必须8字节对齐*/
  18. struct test3{
  19.     char a;
  20.     int b;
  21. }__attribute__((aligned(8)));

  22. /*结构体大小必须16字节对齐*/
  23. struct test4{
  24.     char a;
  25.     int b;
  26. }__attribute__((aligned(16)));

  27. /*int 类型数据大小必须8字节对齐*/
  28. struct test5{
  29.     char a;
  30.     int __attribute__((aligned(8))) b;
  31. };


  32. int main()
  33. {
  34.     printf("test:%d\n",sizeof(struct test));
  35.     printf("test1:%d\n",sizeof(struct test1));
  36.     printf("test2:%d\n",sizeof(struct test2));
  37.     printf("test3:%d\n",sizeof(struct test3));
  38.     printf("test4:%d\n",sizeof(struct test4));
  39.     printf("test5:%d\n",sizeof(struct test5));

  40.     return 0;
  41. }
编译执行的结果:
阅读(4974) | 评论(0) | 转发(0) |
0

上一篇:dd命令的用法

下一篇:网络编程--TCP程序

给主人留下些什么吧!~~