sizeof(struct{bit-field})——包含位域的结构体的空间大小

  • Post author:
  • Post category:其他


原文:sizeof(struct)

原文地址:

http://blog.sina.com.cn/s/blog_913c070a0100zq3m.html

一般情况下,编译器会把struct中的成员作对齐处理,所以sizeof后不是等于所以成员大小之和。

VC编译器做对齐处理的步骤如下(原作者理解):

1、首先获得struct中的大小最大的基本数据类型成员的大小,称为


内存分配基大小


(以下简称:基大小),这里的最大成员为double d1,d1的大小为8,所以基大小为8;

2、按照顺序为struct中的成员分配内存:

(1)、分配一个大小等于基大小的内存;

(2)、从第一个到最后一个成员,取得每个成员的大小为N,调整可插入内存起始地址,使得(可插入内存起始地址 – struct起始地址) 为N的倍数(向后移调整),从可插入内存起始地址 开始插入成员,如果分配的剩余空间大于这个成员的大小,则把struct的成员插进内存中,否则执行(1)。直到把所有成员插完为止。

3、此时struct的大小应该为基大小的倍数。

例如,

struct s{


double d1;

int d2;

char d3;char d4;

};

内存分配情况如下:



版权声明:本文为hjy0125原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。