C语言结构体的字节对齐方式

     当采用sizeof获取结构体大小时,需要考虑内存排列问题。sizeof用于结构体拷贝,比较方便。以下以32位操作系统,x86排列结构,BCB6编译器举例说明。   

测试1

struct A
{
  int a;
  char b;
  short c;
};

A a;

sizeof(a) = 8;

实际使用7个字节,sizeof为8字节,内存排列示意:

|-------int-------|  4字节
|char|--|--short--|  4字节

测试2

struct B
{
  char b;
  int a;
  short c;
};

B a;

sizeof(a) = 12;

实际使用7个字节,sizeof为12字节,内存排列示意:

|char|----|----|----|  4字节
|--------int--------|  4字节
|--short--|----|----|  4字节

测试3

struct C
{
  bool b;
  A a;
  short s;
};

C a;

sizeof(a) = 16;

实际使用10.1个字节,sizeof为16字节,内存排列示意:

|-------bool--------|  4字节
|-------a.a---------|  8字节
|--short--|----|----|  4字节

总结:32位操作系统,内存以4字节对齐排列,正好32位字长。bool,有无符号int,log均占4字节,不需考虑,char和short需要注意。

注意:当含有double(双精度浮点)需要8字节存储,占用8字节内存,所有对齐扩展到8字节。  

 

posted @ 2017-04-18 14:08  hbg200  阅读(251)  评论(0编辑  收藏  举报