当前位置:主页 > 软件编程 > C代码 >

详解C++ 内存对齐

时间:2021-06-22 09:34:32 | 栏目:C代码 | 点击:

操作系统64位和32位有什么区别?

数据类型对应字节数

下面是不同位数编译器下基本数据类型对应的字节数。

32位编译器:

char :1个字节
char*(即指针变量): 4个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double:  8个字节
long:  4个字节
long long: 8个字节
unsigned long: 4个字节

64位编译器:

char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int: 4个字节
unsigned int : 4个字节
float: 4个字节
double:  8个字节
long:  8个字节
long long: 8个字节
unsigned long: 8个字节

总结:32位和64位编译器的基本数据类型字节数主要差别在64位的指针和long为8字节。

C++内存对齐

1.第一个成员变量放在类中内存offset为0的地方,之后的成员变量的对齐按照#pragma pack(n)指定的数值和这个成员变量类型所占字节数中,比较小的那个进行(成员变量间补齐)。
2.在成员变量完成各自内存对齐之后,类(结构或联合)本身也要进行内存对齐,对齐按照#pragma pack(n)指定的数值和类中最大成员变量类型所占字节数中,比较小的那个进行(类中最后一个成员变量结尾后补齐),类大小需要是对齐值得整数倍。

延伸知识:C++空类大小

new需要分配不同的内存地址,不能分配内存大小为0的空间
避免除以sizeof(T)时得到除以0错误故使用一个字节来区分空类。

您可能感兴趣的文章:

相关文章