• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 深入分析C++中类的大小

深入分析C++中类的大小

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++比较两个数大小,c++比较三个数的大小,c++数组大小,c++字符串比较大小,c++ 获取文件大小等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

首先看一个例子:

sizeof(A)=1

sizeof(B)=8

sizeof(C)=4

sizeof(D)=16


对于类A来说,虽然A是一个空类,但为了便于空类进行实例化,编译器往往会给它分配一个字节,这样A实例化后便在内存中有了一个独一无二的地址.对于类B,B的大小应为sizeof(int)+sizeof(char)=5,但是考虑内存对齐,B的大小应为8.对于类C,类的静态成员变量被放在全局区,和类的普通成员并没有放在一块。类的静态成员被声明后就已存在,而非静态成员只有类被实例化后才存在。所以C的大小为sizeof(int)=4。D的大小为B+C的大小+自身数据成员的大小,一共为16.

 

==========================分割线在这里====================================

下面讨论含有虚函数的类的大小:

sizeof(A)=4

sizeof(B)=4

sizeof(C)=8

sizeof(D)=12

对于class A,它含有一个虚函数,编译器会为虚函数生成一张虚函数表,来记录对应的函数地址,为此,在class A的内存地址中要有一个vfptr_A指针指向这个虚表,所以class A的大小为指针大小,即4.(注意,无论类中有多少个虚函数,它们的大小都是4,因为内存中只需要保存这个指针即可)。

对于class B,它是public继承A,虽然它也有一个虚函数,但是从结果看,B应该和A都在B的vtable(虚表中),所以class B的大小为4.

对于class C,它是vitual 继承A,所以要有一个指向父类A的指针,占有4字节大小aa()是继承自class A的虚函数,从结果来看,它没有在内存中占有空间,所以C的大小为sizeof(A)+4=8.

对于class D,它是虚继承class A,同上,要有一个指向父类A的指针,同时,class D中有虚函数,所以要有一个指向虚表的指针,所以sizeof(D)=sizeof(A)+4+4=12

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入分析C++中类的大小

相关文章

  • 2022-04-30大话C语言变量和数据类型
  • 2017-05-28如何在C++中实现按位存取
  • 2017-05-28C++ 二叉搜索树(BST)的实现方法
  • 2017-05-28C++中输入输出流及文件流操作总结
  • 2017-05-28C语言中字符串和数字的相互转换实现代码
  • 2017-05-28C 语言基础教程(我的C之旅开始了)[六]
  • 2017-05-28c++双向链表操作示例(创建双向链、双向链表中查找数据、插入数据等)
  • 2017-05-28C语言实现求定积分的方法
  • 2017-05-28Cocos2d-x UI开发之CCControlSwitch控件类使用实例
  • 2017-05-28C++中四种对象生存期和作用域以及static的用法总结分析

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于C++中的static关键字的总结
    • 枚举类型的定义和应用总结
    • C语言金币阵列问题解决方法
    • C++事件驱动型银行排队模拟
    • c++中const的使用详解
    • C语言中函数参数的入栈顺序详解及实例
    • 简单谈谈C++ 头文件系列之(algorithm)
    • 在输入输出字符串时scanf(),printf()和gets(),puts()的区别浅谈
    • C语言之从字符数组中删除特定的字符
    • C语言实现带头结点的链表的创建、查找、插入、删除操作

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有