Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1483719
  • 博文数量: 181
  • 博客积分: 3308
  • 博客等级: 中校
  • 技术积分: 2227
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-03 12:03
个人简介

我是zoro

文章分类

全部博文(181)

文章存档

2015年(1)

2013年(35)

2012年(39)

2011年(50)

2010年(56)

分类: LINUX

2010-10-28 09:41:24

自然对齐:所谓自然对齐,就是基本 数据类型(如short,int,double)的变量不能简单地存储于内存中的任意地址处,它们的起始地址必须能够被它们的大小整除。例如:在32位平 台下,int和指针类型变量的地址应该能被4整除,而short变量的地址都应该是偶数,bool和char则没有特别的要求。

    所以,基于这种CPU构架的平台,编译器将按照自然对齐的要求来为每个变量生成逻辑地址。

内存对齐:编译器会对变量的起始地址进行对齐,32位机器访问地址是4的倍数处的内存比较方便。

min(系统默认,数据本身)

================================

例:

#include

struct a
{
    char b;
    int c;
    char d;
    double e;
    char f;
};
struct b
{
    char b;
    int c;
    char d;
    double e;
    char f;
}__attribute__((packed));    //表示不对齐数据
int main()
{
    printf("sizeof(a)=%d\n",sizeof(struct a));
    printf("sizeof(b)=%d\n",sizeof(struct b));
    return 0;

}

运行结果:

sizeof(a)=24
sizeof(b)=15

对于结构体a,

 char b;//本身占一个字节,系统为对齐,填充3个字节,故用了4个字节
    int c;    //整型变量占4个字节
    char d;    //本身占一个字节,系统为对齐,填充3个字节,故占用4个字节
    double e;    //占用8个字节
    char f;    //本身占一个字节,系统为对齐,填充3个字节,故占用4个字节

故共占用24字节。

================

若把结构体a改成

struct a
{
    int c;
    char b;
    char d;   
    char f;
    double e;
};

运行结果为:sizeof(a)=16
阅读(1443) | 评论(0) | 转发(0) |
0

上一篇:sizeof及strlen的一些总结

下一篇:关于const

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