The Way of C++

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  55 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks

公告

The first time i use this blog, i will write something that i learn which i think is worth write down.

常用链接

留言簿(3)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

struct
{
   char a;
   int b;
   short c;
};
每个成员起始地址必须为相应类型的大小的倍数,如a,起始地址为0,为sizeof(char)=1的倍数,而到b的时候,因为这时地址为1,不是sizeof(int)=4的倍数,所以编译器会添加3个字节大小,此时地址为4,作为b的起始地址,b占用4个字节,所以此时内存地址为8,8是sizeof(short)=2的倍数,所以c的起始地址为8,占两个字节,所以此时总的分配内存大小为10,但是因为整个结构体的最大成员为sizeof(int)=4,而10不为4的倍数,所以要添加两个字节为12.
使用#pragma pack(n)可以指定编译器按n个字节作为对齐方式,这个指定只对那些大于n个字节的成员有效,如上例,若指定了以2个字节作为对齐,则a的起始地址为0,接着到b,因为sizeof(int)=4 < 2,所以要指定的对齐方式,此时地址为1,不为2的倍数,所以要加1,所以b的起始地址为2,占用4个字节大小之后地址为6,接着是c,因为6是2的倍数,所以6为c的起始地址,占用两个字节,总的大小为8

posted on 2010-09-22 14:49 koson 阅读(344) 评论(0)  编辑 收藏 引用 所属分类: C/C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理