C++对象所占空间

news/2025/3/15 1:07:14/

1、非静态成员变量保存在对象内部,sizeof()这个类对象时,这个类对象所占的内存空间就会因这个成员变量的存在而增长;

2、静态成员变量保存在对象外面,其所占内存空间和类对象无关;

3、成员函数,不管是静态还是非静态,全都保存在类对象外面,不管有几个成员函数,类对象的sizeof()的值大小都不变;

4、虚函数,类中有几个虚函数,类就会产生几个指向虚函数的指针,这些指针被放在一个表中,这个表称为虚函数表。无论类中有几个虚函数,类对象的sizeof()只会增加4个字节,这是因为虚函数的存在,导致系统往类对象中添加了一个指针,该指针正好指向虚函数表,这个指针叫做虚函数指针表指针;

例程如下:

#include <iostream>
class Study
{
public:    Study() {};                         //构造函数        virtual ~Study() {};                //析构函数        int getOld()                        //普通成员函数{return Old;}static int getNumber()              //静态成员函数{return Number;}virtual void student() {};          //虚函数
protected:int Old;                            //普通成员变量;static int Number;                  //静态成员变量
};int main()
{Study a;int ilen = sizeof(a);printf("ilen=%d\n", ilen);    //ilen=8;
}

说明:(1)Old占4个字节;
(2)因为虚函数存在,指向虚函数表的指针占4个字节;


http://www.ppmy.cn/news/914682.html

相关文章

C盘空间异常(坑)

前几天通过禁用还原点清理出来的那90G 今天又满了 &#xff0c;也是十分头疼了。感觉就像不翼而飞 查了一波文件&#xff0c;并没有直接查出来什么大文件 除了虚拟内存分页那几个隐藏文件占用的不重要的10来G 我强行挤出2.5G的空间&#xff0c;我发现C盘大概是没分钟0.01G的…

什么是OO?

OO其实要解决两个重要基本问题&#xff1a;对象如何设计创建&#xff1b;对象创建后之间关系如何协调。

OO

OO  OO(Object–Oriented )面向对象   OO方法(Object-Oriented Method&#xff0c;面向对象方法&#xff0c;面向对象的方法)是一种把面向对象的思想应用于软件开发过程中&#xff0c;指导开发活动的系统方法&#xff0c;简称OO (Object-Oriented)方法&#xff0c;是建立在…

C++/C动态空间开辟的区别

C中开辟空间&#xff1a; malloc()方法&#xff0c;realloc()方法 void *malloc( size_t size ); //提供需要开辟的空间大小&#xff0c;返回空间位置void*指针 void *realloc( void *memblock, size_t size ); //提供原空间内存地址&#xff0c;需要…

ORACLE_OCP之ORACLE数据库空间管理

ORACLE_OCP之ORACLE数据库空间管理 文章目标&#xff1a; 描述Oracle数据库如何自动管理空间通过压缩节省空间主动监视和管理表空间空间使用情况描述Oracle数据库中的段创建控制延迟段的创建使用段顾问使用段收缩功能从表和索引中回收浪费的空间管理可恢复空间分配 一、空间…

零空间定义

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Null Space(零空间)Null Space是什么&#xff1f; Null Space(零空间) 阅读文献“Eigenvalue problems in forced harmonic responses analysis in structural dyn…

OO,OO以后,及其极限

1、什么是软件开发? 软件开发的过程就是人们使用各种计算机语言将人们关心的现实世界映射到计算机世界的过程&#xff1b; 现在的计算机的数学理论基础是由计算机的开山鼻祖&#xff0c;大名鼎鼎的图灵于1937年提出的图灵机模型。 随后不到十年&#xff0c;电子计算机就诞生了…

OO之间的大PK

原来在.NET项目中使用如下的架构图&#xff1a; 以上的架构图就是一个简单的三层架构&#xff0c;可以在此添加接口层&#xff0c;这个暂时不考虑。单说以上的架构图&#xff0c;无论怎么看&#xff0c;也没有看出什么问题&#xff0c;并且从来也没有怀疑过此架构的设计&#x…