1、#pragma pack(n)指令
指定按照对齐的字节数
#pragma pack(2)
typedef struct
{
char* a;//8 8
short b;//2 10
double c;//8 18
char d;//1+1 20
float e;//4 24
char f;//1+1 26
long g;//4 30
int h;//4 34
}test_size_t;
#pragma pack()
2、原则:成员按照从小到大进行排列
#pragma pack(8)
typedef struct
{
char d;
char f;
short b;
float e;
long g;
int h;
double c;
char* a;
}test_size_t_min;
#pragma pack()
1、《深入理解计算机系统》 P191课后题:
注:书上写long是8字节,但是win32-64的VS编译器是4字节。
#pragma pack(8)
typedef struct
{
char* a;//8 8
short b;//2 10
double c;//8 24
char d;//1+3 28
float e;//4 32
char f;//1+3 36
long g;//4 40
int h;//4+4 48
}test_size_t;
#pragma pack()
4、使用#pragma pack(1)解析字节数据流到给定的结构体,不需要字节偏移来解析;
参考:
1、#pragma pack 用法详解_机器视觉001的博客-优快云博客
2、#pragma pack() 释疑_HUSTER593的博客-优快云博客
文章讨论了C++中#pragmapack指令的作用,它用于设置结构体成员的字节对齐方式。通过示例展示了不同对齐设置如何影响结构体的内存布局。同时提到了在Windows的VS编译器中long类型的字节数可能与书本描述的不同。此外,还探讨了使用#pragmapack(1)处理字节流解析的情况。
1317

被折叠的 条评论
为什么被折叠?



