最近总是遇到关于 CPU字节对齐的问题。
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐struct test
{
char m1; =》sizeof( test ) = 16
double m4;
int m3;
};
#pragma pack(pop)//恢复对齐状态
#pragma pack(push) //保存对齐状态
#pragma pack(8)//设定为4字节对齐
struct MyStruct
{ //对齐为 >= 8 时, sizeod(MyStruct) = 24
char dda;
double dda1;
int type;
};
#pragma pack(pop)//恢复对齐状态
以下顺便附上 32 bit 与 64 bit 不同变量的存储大小。
机器平台:X86_64
操作系统:Red Hat 4.1.2-14
编译器:
Size of char is:
Size of unsigned char is:
Size of signed char is:
Size of int is:
Size of short is:
Size of long is:
Size of long int is:
Size of signed int is:
Size of unsigned int is:
Size of unsigned long int is:
Size of long long int is:
Size of unsigned long long is:
Size of float is:
Size of double is:
Size of long double is:
Size of (void *) is:
Size of (char *) is:
Size of (int *) is:
Size of (long *) is:
Size of (long long *) is:
Size of (float *) is:
Size of (double *) is:
——————————————————————————
机器平台:
操作系统:
编译器:
Size of char is:
Size of unsigned char is:
Size of signed char is:
Size of int is:
Size of short is:
Size of long is:
Size of long int is:
Size of signed int is:
Size of unsigned int is:
Size of unsigned long int is:
Size of long long int is:
Size of unsigned long long is:
Size of float is:
Size of double is:
Size of long double is:
Size of (void *) is:
Size of (char *) is:
Size of (int *) is:
Size of (long *) is:
Size of (long long *) is:
Size of (float *) is:
Size of (double *) is 4