C/C++中类的存储方式 - 冰箫寒剑 - CSDN博客
来源:百度文库 编辑:神马文学网 时间:2024/04/27 21:24:24
C/C++中类的存储方式 收藏
C/C++中类的存储方式一、简单对象的存储1、 基本类型对齐原则:Char 1Short 2Int 4Long 4Float 4Double 82、 结构体类型对齐原则:以最大成员类型的对齐方式为准,即当需要增长时,增长最大成员类型所占用的字节数。3、 静态成员变量不占用类对象的存储空间原则:静态成员变量所有的类对象共享一份,在静态区域中,并不占用类对象的空间。4、 没有任何成员变量的类对象占用一个字节的空间验证程序:vc.net2003下运行结果#includeusing namespace std; /*没有任何数据成员的对象类占用一个字节的空间*/class A1{}; /*静态数据成员不占用类对象的存储空间*/class A2{ char c1; static int count;}; /*当只有char类型时,以1个字节为单位对齐*/class B1{ char c1; char c2;}; /*与A比较发现,当最大为short时,以2个字节为单位对齐*/class B2{ char c1; short s;}; /*与A比较发现,当最大为int时,以4个字节为单位对齐*/class B3{ char c1; int i;}; /*与A比较发现,当最大为double时,以8个字节为单位对齐*/class B4{ char c1; float d;}; /*与A比较发现,当最大为double时,以8个字节为单位对齐*/class B5{ char c1; double d;}; /*c s i 占4个字节,d占4个字节*/class C1{ char c; short s; int i; double d;}; /*d占4个字节,c s i 占4个字节*/class C2{ double d; char c; short s; int i;}; /*c占1个字节,d从下一个4字节开始占4个字节,s i在下一个4字节中*/class C3{ char c; double d; short s; int i;}; /*c s 在头4个字节中,d占下四个字节,i 在最后4个字节中*/class C4{ char c; short s; double d; int i;}; int main(){ cout << "size of A1 : " << sizeof(A1) << endl; /*1字节*/ cout << "size of A2 : " << sizeof(A2) << endl; /*1字节*/ cout << endl; cout << "size of B1 : " << sizeof(B1) << endl; /*2字节*/ cout << "size of B2 : " << sizeof(B2) << endl; /*4字节*/ cout << "size of B3 : " << sizeof(B3) << endl; /*3字节*/ cout << "size of B4 : " << sizeof(B4) << endl; /*8字节*/ cout << "size of B5 : " << sizeof(B5) << endl; /*8字节*/ cout << endl; cout << "size of C1 : " << sizeof(C1) << endl; /*16字节*/ cout << "size of C2 : " << sizeof(C2) << endl; /*16字节*/ cout << "size of C3 : " << sizeof(C3) << endl; /*24字节*/ cout << "size of C4 : " << sizeof(C4) << endl; /*24字节*/ system("pause"); return 0;} 二、继承下的对象存储1、虚表指针占用4个字节原则对于一个类而言,在不存在虚函数的情况下,类的大小等于成员大小之和(按照对其原则),当存在虚拟函数时,由于要保存虚表指针,故多占用4个字节。2、子类共享父类的虚表指针原则在普通继承下,子类与父类共享一个虚表,子类不需要另外添加内存。3、虚基类表指针占用4字节原则在虚继承的情况下,继承了多个继承了同一个父类的中间类的子类只保存了一个同他基类的备份,但每个中间类都需要需要保存指向基类表的指针来指向共同的基类。 #include using namespace std; class A1{ int numA1;}; /*与A1比较,存在虚函数的情况下,需要保存虚函数表指针占4个字节*/class A2{ int numA2; virtual FunA2();}; /*与A2比较,当不存在不同于父类的虚函数时,子类与父类共享保存虚函数表的指针*/class B1 : A2{ int numB1;}; /*与A2比较,当存在不同于父类的虚函数时,子类与父类共享保存虚函数表的指针*/class B2 : A2{ int numB2; virtual FunB2();}; /*与B1比较,虚继承需要保存指向虚基类表的指针占4个字节*/class B3 : virtual A2{ int numB3;}; /*虚继承下,若子类中有不同于父类的虚函数,则需要不同于父类的指向虚函数表的指针*/class B4 : virtual A2{ int numB4; virtual FunB4();}; /*虚继承下,共同的基类只有一个备份,但每个虚继承的类中多了一个只想那个虚基类表的指针*/class C1 : B3, B4{ int numC1;}; void main(){ cout << "sizeof A1 is : " << sizeof(A1) << endl; /* 4 */ cout << "sizeof A2 is : " << sizeof(A2) << endl; /* 8 */ cout << endl; cout << "sizeof B1 is : " << sizeof(B1) << endl; /* 12 */ cout << "sizeof B2 is : " << sizeof(B2) << endl; /* 12 */ cout << "sizeof B3 is : " << sizeof(B3) << endl; /* 16 */ cout << "sizeof B4 is : " << sizeof(B4) << endl; /* 20 */ cout << endl; cout << "sizeof C1 is : " << sizeof(C1) << endl; /* 32 */ system("pause");}C的内存分布:B3指向虚基类表的指针 4B3自己的存储区域 4B4自己的指向虚函数表的指针 4B4指向虚基类表的指针 4B4自己的存储区域 4C1自己的存储区域 4基类的存储区域 8 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bxhj3014/archive/2008/10/04/3015795.aspx
C/C++中类的存储方式一、简单对象的存储1、 基本类型对齐原则:Char 1Short 2Int 4Long 4Float 4Double 82、 结构体类型对齐原则:以最大成员类型的对齐方式为准,即当需要增长时,增长最大成员类型所占用的字节数。3、 静态成员变量不占用类对象的存储空间原则:静态成员变量所有的类对象共享一份,在静态区域中,并不占用类对象的空间。4、 没有任何成员变量的类对象占用一个字节的空间验证程序:vc.net2003下运行结果#include
C/C++中类的存储方式 - 冰箫寒剑 - CSDN博客
浮点数在计算机中存储方式 - virus026的专栏 - CSDN博客
C语言中最常用标准库函数 - candyliuxj - CSDN博客
探讨C 中对象的“浅拷贝”与“深拷贝” - Chris_Magic的学习笔记 - CSDN博客
C语言中float,double类型,在内存中的结构(存储方式). - JUN_NEW -...
C语言宏的学习: - henry19850318的专栏 - CSDN博客
C语言宏的学习: - henry19850318的专栏 - CSDN博客
异常处理 - [C++] - guomei的专栏 - CSDN博客
C Recommend Book List - ehui928的专栏 - CSDN博客
C语言字符串函数大全 - amossavez的专栏 - CSDN博客
javacard mask.c 文件结构 - tccth4091的专栏 - CSDN博客
C语言变量的存储类别
c/c++中函数指针的含义 [c/c++]---01
C-Free4.1专业版注册码破解 - xiufeng_wang的专栏 - CSDN博客
keil c编译器错误与解决方法 - babylon_0049的专栏 - CSDN博客
A^B mod C的分治思想 - xiaoc's home - CSDN博客
C/C++函数调用约定 - 胡超的学习日志 - CSDN博客
文件打开的几种方式(c/c++/Windows)
C 静态存储区 栈 堆的区别 转载
探究C/C 可变参数 - GUANZHONG 's Sharing Space - CSDN博客
c/c 中指针学习的两个绝好例子 [C/C ]
谁有《C 高级实用程序设计》- C程序汉字显示技术 那一章的源代码 C/C / 非技术区 - CSDN社区 community.csdn.net
Exchange 2007 的存储理解 - hotxin的专栏 - CSDN博客
C语言程序的内存分配方式