内存对齐
来源:互联网 发布:管家婆数据导入失败 编辑:程序博客网 时间:2024/05/22 13:19
在结构体中,成员数据对齐满足以下规则:
a、结构体中的第一个成员的首地址也即是结构体变量的首地址。
b、结构体中的每一个成员的首地址相对于结构体的首地址的偏移量(offset)是该成员数据类型大小的整数倍。
c、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.)
d、结构体的总大小是对齐模数(结构体中最大数据类型的成员大小)的整数倍。(对齐模数等于#pragma pack(n)所指定的n与结构体中最大数据类型的成员大小的最小值)
#include<iostream>using namespace std;class A{public:int a; //0char b;//5 1的整数倍(1)char d;//6 int c; //8 4的整数倍(4)}; //最终大小为12,提现的是成员变量相对首地址的偏移必须是其大小的整数倍class B{public:int a; //0char b; //5int c; //8 4的整数倍char d; //13};//最终大小是16,体现了结构体最终大小是模数的整数倍(模数是最大的成员变量和#pragma pack(n)中的最小值)class C{public:int a; //0double b;//8int c; //16char d; //20}; //最终大小是模数的整数倍 24class D{public:int a; //0C c; //8(整体24) 当结构体作为成员,按照结构体最大的数据类型进行对其,因此c按照8处理int b; //32};//最终大小是40,b结束在36,但模数是8,所以为40int main(){A aa;cout << sizeof(aa) << endl;B bb;cout << sizeof(bb) << endl;C cc;cout << sizeof(cc) << endl;D dd;cout << sizeof(dd) << endl;system("pause");return 0;}
阅读全文
0 0
- 关键字 对齐 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 内存对齐
- 编写一个程序计算后缀表达式的值
- 表情识别训练过程
- 最小生成树之prim算法概念与实现
- 整数划分 51Nod
- 堆和堆排序
- 内存对齐
- python单元测试框架
- poj 1313 Booklet Printing 模拟水题
- unity点乘和叉乘的使用
- CCF201703-1 分蛋糕
- Mac上强大的清理工具CleanMyMac 激活码 免费下载
- Unity3D-Vector3
- 计算机网络另附抓包
- bzoj 4991: [Usaco2017 Feb]Why Did the Cow Cross the Road III