读书笔记--struct的成员对齐

来源:互联网 发布:一级永久域名注册 编辑:程序博客网 时间:2024/05/07 06:30

  先看一个程序:
#include<iostream>
using namespace std;

#pragma pack(8)

struct example1
{
 short a;
 long b;
};

struct example2
{
 char c;
 example1 struct exa1;
 short e;
};

#pragma pack()

int main(void)
{
 example2 struct exa2;
 cout<< sizeof(struct example1)<<endl;
 cout<< sizeof(struct example2)<<endl;
 system("pause");
 return 0;
}

结果为8 16

自然对界:
编译器会自动进行成员变量的对齐。缺省情况下(第一个成员的地址和整体结构的地址相同)。是指按结构体的成员中size最大的成员对齐。

struct naturalaign
{
 char a;
 short b;
 char c;
};

size最大为short的2字节。故char成员a、c都以2位单位对齐,结果为6

若改为:
struct naturalaign
{
 char a;
 int b;
 char c;
};

其结果为12


制定对界:
可以通过伪指令#paogma pack(n)来改变缺省的对界条件。编译器间按照n个字节对齐,使用伪指令#paogma pack( )来取消自定义字节对齐方式
注意:如果#paogma pack(n)中n大于结构体中最大成员的size,则不起作用,任按照size最大成员对界
#paogma pack(n)
struct naturalign
{
 char a;
 int b;
 char c;
};
#paogma pack( )
当n为4,8,16时,对其方式均为一样为12。当n为2时,结果为8 

原创粉丝点击