struct数据对齐与#pragma pack(n)
对struct数据对齐与#pragma pack(n)的理解一直存在误区,这里做一个总结,便于以后记忆。
规则主要有两条:
1.结构,联合或者类的数据成员,第一个放在偏移为0的地方,以后每一个数据成员的对齐,按照#pragma pack指定的数值和这个数据成员的自身长度来定,取较小的那个。
2.对于整体结构的对齐,则按照结构体中最大数据成员和#pragma pack的大小来定,去较小的那个。
以下是测试代码:
Cpp代码
#include<iostream>
using namespace std;
struct test
{
short a;
short b;
int c;
char d;
};
#pragma pack(4)
struct test2
{
char a;
short b;
char c;
};
#pragma pack()
struct s1
{
short a;
long b;
};
struct s2
{
char c;
s1 d;
long long e;
};
#pragma pack(4)
struct s3
{
int a;
char b;
short c;
char d;
};
struct s4
{
char a;
short b;
char c;
};
#pragma pack()
#pragma pack(2)
struct s5
{
int a;
char b;
short c;
char d;
};
#pragma pack()
int main()
{
cout<<sizeof(test)<<endl;
cout<<sizeof(test2)<<endl;
cout<<sizeof(s1)<<endl;
cout<<sizeof(s2)<<endl;
cout<<sizeof(s3)<<endl;
cout<<sizeof(s4)<<endl;
cout<<sizeof(s5)<<endl;
unsigned int ccc;
cout<<sizeof(ccc)<<endl;
}
作者“plussai”
补充:软件开发 , C语言 ,