C++对象所占内存的大小
2016-06-21 23:21
441 查看
class占据内存的由三部分组成:
1、非静态数据的总和大小
静态变量都在全局数据区分配内存
2、加上任何由于alignment的需求填补上的空间(可能存储于members之间,也可能存在于集合体边界)
alignment就是将数值调整到某数的倍数,以使bus的“运输量”达到最高效率。
3、加上为了支持virtural而由内部产生的任何额外负担。
一个类中若有虚函数,(不论是自己的虚函数,还是继承而来的),那么类中就有一个成员变量:虚函数指针,这个指针指向一个虚函数表,虚函数表的第一项是类的typeinfo信息,之后的项为此类的所有虚函数的地址。
输出结果为:4 4 4 8
关于虚函数在基类,派生类之间虚函数表的问题见陈浩《C++虚函数表解析》http://blog.csdn.net/sdausxc/article/details/51732045
1、非静态数据的总和大小
静态变量都在全局数据区分配内存
2、加上任何由于alignment的需求填补上的空间(可能存储于members之间,也可能存在于集合体边界)
alignment就是将数值调整到某数的倍数,以使bus的“运输量”达到最高效率。
3、加上为了支持virtural而由内部产生的任何额外负担。
一个类中若有虚函数,(不论是自己的虚函数,还是继承而来的),那么类中就有一个成员变量:虚函数指针,这个指针指向一个虚函数表,虚函数表的第一项是类的typeinfo信息,之后的项为此类的所有虚函数的地址。
#include "stdafx.h" #include <iostream> using namespace std; class CBase{ public: CBase(){} virtual ~CBase(){} virtual void fun1(){} virtual void fun11(){} }; class CBase2{ public: CBase2(){} virtual ~CBase2(){} }; class CDerived1: public CBase { public: CDerived1(){} virtual ~CDerived1(){} virtual void fun(){} }; class CDerived2: public CBase, public CBase2 { public: CDerived2(){} virtual ~CDerived2(){} virtual void fun(){} }; void main() { cout << sizeof( CBase) << endl; cout << sizeof(CBase2) << endl; cout << sizeof(CDerived1) << endl; cout << sizeof(CDerived2) << endl; int yu; yu =8; }
输出结果为:4 4 4 8
关于虚函数在基类,派生类之间虚函数表的问题见陈浩《C++虚函数表解析》http://blog.csdn.net/sdausxc/article/details/51732045
相关文章推荐
- c语言学习笔记33之void
- Calculation
- Search a 2D Matrix II
- [转载]C语言字节对齐(以32位系统为例)
- 你最需要注意的11条要点for C++
- C++常类型(const)
- C语言中的typedef问题
- C++ 中的单例模式
- C语言链式栈和顺序栈的实现
- C语言数组,顺序表的初始化,添加,删除和打印
- C语言单链表的3种排序算法,插入排序,冒泡排序,选择排序
- 课程表(c语言)
- 今天研究了一下手机通信录管理系统(C语言)
- C语言双向循环链表的生成,删除和打印
- C语言实现约瑟夫环,使用循环单链表和循环数组2种方法
- AVL平衡树及插入操作的C语言实现
- 哈希表的C++实现
- 【C/C++】strcpy,strncpy和strchr
- Single Number III
- C语言实现判断素数,回文数,水仙花数,闰年