内存对齐规则
2015-11-23 22:06
381 查看
#include "stdafx.h" #include <iostream> using namespace std; class B { public: double m_a; char m_b; short m_c; int m_d; char m_e; int m_f; }; class C { public: char m_a; char m_b; int m_c; short m_d; }; int main() { B b; cout << &b.m_a << endl; cout << (bool*)&b.m_b << endl; cout << &b.m_c << endl; cout << &b.m_d << endl; cout << (bool*)&b.m_e << endl; cout << &b.m_f << endl; cout << sizeof(B) << endl; C c; cout << (bool*)&c.m_a << endl; cout << (bool*)&c.m_b << endl; cout << &c.m_c << endl; cout << &c.m_d << endl; cout << sizeof(C) << endl; return 0; } //用B作为例子,说明对齐规则: //(1)B中最大的类型为double, 大小为8字节.(以类中最大类型大小作为块的分配单位) //(2)分配第一块8字节,分给m_a.刚好放下m_a变量。 //(3)分配第二块8字节,首先放入m_b, 只使用了1字节.然后放入m_c,占用2个字节。(类型变动)此时将m_b和m_c看成一个类,那么就要以m_c的类型short作为基本分配单位, //那么此时m_b就要占用2个字节,第一个字节放入真实的内容,第二个字节作为占位(无内容), m_c 占用2字节。所以这里一共占用了4byte.接下来放入m_d, m_d为 //int类型,占用4字节。此时刚好填满了8byte, 于是这块8byte内存使用完毕 //(4)分配第三块8字节,放入m_e, m_e占用1字节,然后放入m_f,占用4个字节。(类型变动)此时将m_e和m_f 看成一个类,那么就要以m_f的类型int做为基本的分配单位, //那么此时m_e就要占用4个字节,第一个字节放入真实的内容,剩余3个字节作为占位(无内容),m_f占用8字节中的剩余4字节. //基本规则: //(1)找到类中变量类型最大的类型。以此作为块分配单位。 //(2)尽量填满每块的内容。 //(3)类型发生变化的时候,要特别注意。
输出:
相关文章推荐
- 源码阅读笔记
- msxml6_x64 下载
- 在eclipse中安装TestNG
- PERL 引用与解引用
- 自定义导航控制器
- Bmob文档阅读2-数据及其操作
- JAVA三星题之hangman
- 对plsql一些简单的设置,提高使用的效率
- Android之支付宝设计与开发
- 修改Hadoop源码的搜索技巧
- Codeforces 599B Spongebob and Joke 【水题】
- Cloud Design Pattern - Sharding Pattern(分片模式) [上篇]
- c++类模板之间友元函数调用
- 多线程 同步synchronized、通信wait、notify
- Codeforces 599A Patrick and Shopping 【水题】
- css:appearance:none;
- STM32之SysTick学习
- 机器学习——边角料
- Java中获取键盘输入值的三种方法
- 网站开发进阶(二十)JS中window.alert()与alert()的区别