这个很重要。编译器按照成员列表的顺序一个接一个的给每个成员分配内存,只有当存储成员时 需要满足正确的边界对其要求时,成员之间才可鞥出现填充的额外内存空间。
系统禁止编译器在一个结构的起始位置跳过几个字节来满足边界对其的要求,因此所有的 结构的起始存储位置 必须是结构 中边界要求最严格的数据类型所要求的位置。
你可以在声明时 对结构的成员类表重新 排列,让那些读边界要求最严格的成员 首先出现,对边界要求 最弱的成员最后出现。
但同时要考虑程序的课维护性和可读性。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
int main()
{
struct ALIGN {
char a;
int b;
char c;
};
cout << sizeof( ALIGN ) << endl;
cout << offsetof( struct ALIGN , b ) << endl;
struct ALIGN2 {
int b;
char a;
char c;
};
cout << sizeof( ALIGN2 ) << endl;
cout << offsetof( struct ALIGN2 ,c ) << endl;
}
输出如下:
wangkai@ubuntu:~/Test$ ./string
12
4
8
5
1万+





