前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++类对象所占的内存空间

C++类对象所占的内存空间

作者头像
Ch_Zaqdt
发布2020-03-09 13:31:29
1.4K0
发布2020-03-09 13:31:29
举报
文章被收录于专栏:Zaqdt_ACMZaqdt_ACM

       对于一个什么都没有定义的空类来说,它的大小不是0,而是1,因为实例化对象会获得一个独一无二的地址,也是为了区别该类的不同对象。在深度探索C++对象模型中是这样说的:那是被编译器插进去的一个char,使得这个class的不同实体(object)在内存中配置独一无二的地址。也就是说这个char是用来标识类的不同对象的。

       如果在类中定义成员函数(包括静态成员函数),不占用类对象的内存空间。即每个类都只有一个,如有多个对象去共享这一个成员函数。成员变量会占用类对象的内存空间,即每个对象都有一份成员变量,但是静态成员变量不占对象的内存。

       对于虚函数来说,是基于类的,每创建一个虚函数,在类中就会产生一个指向虚函数地址的指针,那么这些指针就存放在一个表里,这个表就被称为虚函数表(virtual table[vrbl])。虚函数表一般保存在可执行文件中,当程序运行时载入到内存中。

       对于有虚函数的对象来说,只要类中包含有虚函数(无论是1个还是多个),那么对于对象来说都额外占用4个字节的内存。原因就是因为系统在对象中添加了一个指向虚函数表的指针,通常叫做vptr。

       内存字节对齐的目的是为了提高访问速度。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云函数
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。云函数是实时文件处理和数据处理等场景下理想的计算平台。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档