【程序设计】内存对齐方式(sizeof的使用)
来源:互联网 发布:淘宝访客数计算公式 编辑:程序博客网 时间:2024/06/06 10:58
示例1:
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;*/}</span>
输出结果: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:
<span style="font-size:18px;">#include <iostream>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;*/}</span>输出结果:24
原因:参考第一条
示例3:数组
<span style="font-size:18px;">#include <iostream>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;}</span>
结果:7
原因:char数组不可看成一个对齐整体,Node2对齐基于1;故结果为7;
示例4:结构体中的结构体
<span style="font-size:18px;">#include <iostream>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;}</span>
输出结果:32
原因:
Node1为24,这个参考示例1;
但是Node1中的对齐基数是8;因为Node2中只有char m1,基数为1小于Node1的基数8;
所以采取Node1的对齐基数8;但是Node1是一个整体,不能将其填充部分的内容分给Node2中的m1使用。故
m1必须同样分配8字节给他,总字节数;8+24=32
本文由Cout_Sev 搜集整理
转载注明出处
http://blog.csdn.net/cout_sev
谢谢!
0 0
- 【程序设计】内存对齐方式(sizeof的使用)
- sizeof (union) (struct) 内存对齐方式
- sizeof(struct)对齐方式
- 类的内存对齐(类的sizeof)
- C++ sizeof 及 涉及的内存对齐
- sizeof 关于内存对齐的理解
- 与内存对齐有关的sizeof
- sizeof运算符的内存对齐问题
- sizeof()等等的内存对齐问题
- 结构体的内存对齐方式(结构体大小计算 sizeof)(
- 神秘的 sizeof(union) 、sizeof(struct) 和内存对齐技术
- 神秘的 sizeof(union) 、sizeof(struct) 和内存对齐技术
- 内存对齐和sizeof(结构体)
- sizeof与内存对齐
- sizeof 内存对齐
- 内存地址对齐 sizeof
- sizeof与内存对齐
- sizeof以及内存对齐
- 简单的利息计算器
- 语言编程的救赎
- POJ 2195 地图的最小费用最大流
- qdebug使用方法
- java身份证验证
- 【程序设计】内存对齐方式(sizeof的使用)
- 编辑距离算法
- Iterator和ListIterator的作用和区别
- Timer与ScheduledThreadPoolExecutor
- 八大排序算法
- 一个简单实用的log类
- 欧拉回路
- HDU 1334 Perfect Cubes【穷举法】
- 几种c/c++中字符串转整形的方法