C++内存对齐
来源:互联网 发布:移动硬盘保护软件 编辑:程序博客网 时间:2024/06/09 12:46
请牢记以下3条原则:(在没有#pragma pack宏的情况下)
1、数据成员对齐规则:结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,之后的每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机子上为4字节,所以要从4的整数倍地址开始存储)。
2、结构体作为成员:如果一个结构体里同时包含结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储(如struct a里有struct b,b里有char,int ,double等元素,那么b应该从8(即double类型的大小)的整数倍开始存储)。
3、结构体的总大小:即sizeof的结果。在按之前的对齐原则计算出来的大小的基础上,必须还得是其内部最大成员的整数倍,不足的要补齐(如struct里最大为double,现在计算得到的已经是11,则总大小为16)。
#include <iostream>using namespace std; struct X1{ int i;//4个字节 char c1;//1个字节 char c2;//1个字节 }; struct X2 { char c1;//1个字节 int i;//4个字节 char c2;//1个字节 };struct X3{ char c1;//1个字节 char c2;//1个字节 int i;//4个字节 static int t; static double t1; };int X3:: t =0;double X3:: t1 =0.0;struct X4 {int a; char b; short c; char d; };struct inner { char c1; double d; char c2; }; int main() { cout<<"long "<<sizeof(long)<<"\n";cout<<"long long"<<sizeof(long long)<<endl;cout<<"double"<<sizeof(double)<<endl; cout<<"int "<<sizeof(int)<<"\n"; cout<<"char "<<sizeof(char)<<"\n"; X1 x1; X2 x2; X3 x3;X4 x4; cout<<"x1 的大小 "<<sizeof(x1)<<"\n"; cout<<"x2 的大小 "<<sizeof(x2)<<"\n"; cout<<"x3 的大小 "<<sizeof(X3)<<"\n";cout<<"x4 的大小 "<<sizeof(x4)<<"\n";cout<<"inner 的大小 "<<sizeof(inner)<<"\n"; return 0; }
0 0
- 【C/C++】内存对齐
- C中的内存对齐
- C/C++内存对齐
- C/C++内存对齐
- c 内存对齐
- C/C++内存对齐
- C/C++内存对齐
- C/C++ 内存对齐
- C/C++ 内存对齐
- C内存对齐详解
- C语言 内存对齐
- c 内存对齐
- C/C++内存对齐
- C语言内存对齐
- C/C++内存对齐
- C/C++内存对齐
- C/C++内存对齐
- C中的内存对齐
- 【NOIP模拟】20140817 题解 & 总结
- Remove Duplicates from Sorted List
- 单例设计模式
- Hibernate多对多、一对多查询出现failed to lazily initialize a collection of role
- C++运算符重载经典案例
- C++内存对齐
- IT忍者神龟之 配额不足的解决方法ORA-01536: space quota exceeded for tablespace
- 行内元素在设置成浮动后,自动变为块状元素
- PL/SQL Developer如何连接64位的Oracle图解
- 【HDU 3487】Play with Chain(Splay)
- python各种类型转换-int,str,char,float,ord,hex,oct等
- 安全套
- Java二维数组
- poj_3468,线段树成段更新