C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ 内存对齐

详解C++ 内存对齐

作者:吴尼玛

这篇文章主要介绍了C++ 内存对齐的相关资料,帮助大家更好的理解和使用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错误故使用一个字节来区分空类。

以上就是详解C++ 内存对齐的详细内容,更多关于C++ 内存对齐的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文