Chinaunix首页 | 论坛 | 博客
  • 博客访问: 618690
  • 博文数量: 172
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 1252
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-29 22:26
文章分类

全部博文(172)

文章存档

2011年(6)

2010年(7)

2009年(159)

我的朋友

分类: LINUX

2009-07-14 23:30:38

下面的小程序是关于数据对齐的一个试验,在我的 2.4 内核的 Linux 上运行结果如下:

size of Foo1: 16
size of Foo2: 12
size of Foo3: 12
size of Foo4: 10



#include <stdio.h>

  
struct Foo1
{
   
char a;
   
int  b;
   
char c;
   
int  d;
}
;

#pragma pack (2)
struct Foo2
{
   
char a;
   
int  b;
   
char c;
   
int  d;
}
;
#pragma pack ()

struct Foo3
{
   
char a;
   
char c;
   
int  b;
   
int  d;
}
;


struct Foo4
{
   
char a;
   
int  b;
   
char c;
   
int  d;
}
 __attribute__ ((__packed__));


int main(int argc, char **argv)
{

   printf(
"size of Foo1: %d "sizeof(struct Foo1));
   printf(
"size of Foo2: %d "sizeof(struct Foo2));
   printf(
"size of Foo3: %d "sizeof(struct Foo3));
   printf(
"size of Foo4: %d "sizeof(struct Foo4));


   
return 0;
}

~
 

1、 Foo1 未经过任何处理的,由于整型需要按 4 字节对齐,因此实际存储结果如下,占用 16 个字节空间



2、Foo2 通过 #pragma pack (2) ,将对齐方式改为 2 字节对齐,实际存储结果如下,占用 12 字节空间


3、 Foo3, 通过 #pragma pack (),又恢复到默认的 4 字节对齐方式,但是由于调整了变量的顺序,实际存储结果如下,占用 12 字节空间


4、Foo4, 通过 GCC 的 __packed__ 的扩展属性,禁止对齐,得到如下结果,占用空间 10 字节

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