IT博客 联系 聚合 管理  

Blog Stats

随笔档案


knight

以delphi为例:
TTest = record
c1: char;
i1: Integer;
c2: char;
c3: Char;
end;
这个结构如果用sizeof取其占用的内存大小,是多少呢,是1+4+1+1=7么,不是,是4*3 = 12; 这是因为32位编译的时候,默认结构会自动内存对齐(32bit = 4byte)。

如果要想让这个结构占用7个字节的话,必须加上packed关键字。如下:
TTest = packed record
c1: char;
i1: Integer;
c2: char;
c3: Char;
end;

c中也有类似的语法,如
#define ATTRIBUTE_PACKED __attribute__((packed))
typedef struct {
...
} ATTRIBUTE_PACKED record_t;
__attribute__ ((packed)); 是说取消结构在编译过程中的优化对齐。
__attribute__ ((aligned (64))); 是说让dummy成员对齐在64-bit自然边界上。


再附两种情况增加理解:
TTest = record
c1: char;
i1: Integer;
end;
//占用8字节

TTest = record
c1: char;
i1: Integer;
c2: char;
end;
//占用12字节
TTest = record
c1: char;
end;
//占用1字节

posted on 2005-10-14 03:27 knight 阅读(294) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。