设为首页 加入收藏

TOP

内存对齐方式
2015-07-20 17:49:34 来源: 作者: 【 】 浏览:3
Tags:内存 方式

示例1:

#include 
   
     using namespace std; struct Node1{ bool m1; int m2; bool m3; double m4; bool m5; }; // struct Node2{ // char m1; // char m2; // int m3; // }; int main() { cout << sizeof(Node1) << endl; /* cout << sizeof(Node2) << endl;*/ }
   

输出结果:32


原因:double(8) > int(4) > bool(1)

所以在double出现之前采用int,原结构体每个成员变量内存分配为:1、4、1、8、1

故1扩展为4,4保持不变,第二个1必须扩展为8,这样1(4) + 4(4) + 1(8) = 16才能被8整除,最后一个1扩展为8.

总共内存4+4+8+8+8 = 32.



示例2:

#include 
   
     using namespace std; struct Node1{ bool m1; bool m3; int m2; double m4; bool m5; }; // struct Node2{ // char m1; // char m2; // int m3; // }; int main() { cout << sizeof(Node1) << endl; /* cout << sizeof(Node2) << endl;*/ }
   
输出结果:24


原因:参考第一条


示例3:数组

#include 
   
     using namespace std; // // struct Node1{ // bool m1; // bool m3; // int m2; // double m4; // bool m5; // }; struct Node2{ char m1; char m2[6]; }; int main() { /* cout << sizeof(Node1) << endl;*/ cout << sizeof(Node2) << endl; }
   

结果:7


原因:char数组不可看成一个对齐整体,Node2对齐基于1;故结果为7;


示例4:结构体中的结构体

#include 
   
     using namespace std; struct Node1{ char m1; double m2; char m3; }; struct Node2{ char m1; Node1 m2; }; int main() { /* cout << sizeof(Node1) << endl;*/ cout << sizeof(Node2) << endl; }
   

输出结果:32

原因:

Node1为24,这个参考示例1;

但是Node1中的对齐基数是8;因为Node2中只有char m1,基数为1小于Node1的基数8;

所以采取Node1的对齐基数8;但是Node1是一个整体,不能将其填充部分的内容分给Node2中的m1使用。故

m1必须同样分配8字节给他,总字节数;8+24=32

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU1039 Easier Done Than Said? 下一篇CodeForces 34C Page Numbers

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·工业机器人TCP校准中 (2025-12-25 05:19:17)
·opc 通讯协议与 TCP (2025-12-25 05:19:15)
·labview中tcp/ip通信 (2025-12-25 05:19:13)
·新书介绍《Python数 (2025-12-25 04:49:47)
·怎么利用 Python 进 (2025-12-25 04:49:45)