C++中计算类对象的大小

【C++】类与对象——如何计算类对象的大小 文章目录前言第一步类对象里存储什么假设一一个对象里存储了所有的成员变量和方法假设二一个对象里存储了所有的成员变量和一个指向成员函数的数组指针假设三一个类对象里只存储了成员变量实际结果结论 前言 如果有小伙伴不太了解类的“形象”,可以参照这篇文章 什么是类?定义?访问?作用域? 本篇文章是介绍类对象的大小,与结构体大小计算非常相似,如果对结构体大小计算不清楚话,要提前学习哦 结构体大小怎么计算?内存对齐?偏移量? 第一步 类对象里存储什么 ????我们想要计算类对象的大小,就要先清楚类对象里存储的是什么 我们 阅读详情

计算类对象的大小

计算类对象的大小只需要将类中的成员变量加起来,同时注意内存对齐。
例

class A
{
public:
	void SetAInfo(const char* name, char* gender ,char age)
	{

	}

private:
	char _name[20];
	char _gender[3];
	int _age;
};
int main()
{
	cout << sizeof(A) << endl;

	return 0;
}

根据结构体内存对齐规则

name是char型,对应到结构体变量偏移量为0的地址处。

gender是char型,对齐数为1,要对齐到对齐数的整数倍的位置,对应到偏移量为20的地址处。

age是int型,对齐数为4,要对齐到对齐数的整数倍的位置,对应到偏移量为23的地址处。

因此,sizeof结果为28。

空类

class A
{
public:

	void SetA(int a)
	{
		_a = a;
	}
private:
	int _a;
};

class B
{
public:
	void test(B)
	{}
};

class C
{};

int main()
{
	cout << sizeof(A) << endl;
	cout << sizeof(B) << endl;
	cout << sizeof(C) << endl;
	return 0;
}

sizeof结果为4,1,1

空类有大小

原因:
假设在C中定义c1,c2,c3三个不同对象,若空类大小为0,那么c1,c2,c3将存储在相同的空间中,c1,c2,c3成为相同对象,假设错误。

因此,空类存在大小,目的是为了区分空类定义出来的不同对象。

在主流的编译器(如VS,g++)中,空类的大小为1。

C++中计算类和结构体大小的方法详解 在C++中,可以使用sizeof运算符来计算类(class)和结构体(struct)的大小。sizeof运算符返回一个对象或类型所占用的字节数,包括成员变量和对齐字节等。本文将详细介绍如何使用sizeof计算类和结构体的大小,并提供相应的源代码示例。 阅读详情

相关推荐

C++ sizeof 运算符:获取对象大小的工具

通过使用 sizeof 运算符,我们可以在编程过程中准确地获取对象、数据类型或表达式的大小。在C++编程中,sizeof 运算符是一个非常有用的工具,它用于获取对象或数据类型的大小。除了对象和数据类型,我们还可以使用 sizeof 运算符获取表达式的大小。需要注意的是,sizeof 运算符在编译时求值,返回的是一个常量表达式的结果。如果我们只想获取某个数据类型的大小,而不是具体对象的大小,可以直接将数据类型作为 sizeof 运算符的参数。要获取对象的大小,可以直接将对象作为 sizeof 运算符的参数。

PixelCoder的博客 206

C++中如何计算类对象的大小

在C语言的结构体概念中,为了计算出结构体的内存大小,我们了解到了内存对齐。在学习到C++的类与对象时,我们又遇到了一个问题:如何计算类对象的大小。 首先我们要知道什么是内存对齐 在C语言中,先来看一个例子: typedef struct { int a; short b; double c; }A; typedef struct { ...

ENSHADOWER的博客 6094

C++中计算类的大小的方法详解

需要注意的是,类的大小可能会受到对齐要求的回答已经在上面的文章中提供了。这是一个关于如何计算C++类大小的详细解释,包括示例代码和对对齐要求的讨论。在C++中,我们经常需要计算类的大小,以便了解对象在内存中占用的空间大小。例如,如果一个类有一个int类型的成员变量和一个char类型的成员变量,而对齐边界是4字节,那么编译器可能会在成员变量之间插入一些填充字节,以满足对齐要求。对于类的大小计算,sizeof运算符将返回该类对象在内存中占用的空间大小,包括类的成员变量和一些可能的额外空间(如对齐要求等)。

TechChamp的博客 491

C++类与对象(类对象大小的计算以及this指针介绍)

目录 1.类的对象大小的计算 2.类成员函数的this指针 本篇讲述以上类容 类的对象大小计算 在C语言中,结构体中的成员变量,满足内存对齐原则,具体内存对齐原则,在我之前讲的C语言结构体中有详细说明,这里就不多说了内存对齐原则 那么,C++中的类,也满足内存对齐原则,比如: class person { int _a; char _b; double _c; }; int main() { person _A; cout<<sizeof(_A)<<endl; } 运行结

qq_44819750的博客 770

指向对象的C++指针、对象的大小

课程有以下六大特色: 一、业内独家专业手游开发网络培训课程 二、注重手机游戏开发基础,全程项目贯穿 三、Android4.3游戏开发基础、Cocos2D-X,Unity2D,Unity3D一个都不能少 四、课程首次涉及跨平台游戏引擎技术,国内独家(AndEngine引擎、libGDX引擎) 五、跨平台技术(HTML5技术) 六、经典游戏重现(捕鱼达人、斗地主、天天酷跑、围住神经猫)

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 443

C++中虚函数继承类的内存占用大小计算

计算一个类对象的大小时的规律: 1、空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同); 2、一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的; 3、因此一个对象的大小≥所有非静态成员大小的总和; 4、当类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable; 5、虚承继的情况:由于涉及到虚函数表和虚基表,会同时增加一个(多重虚继承下对应多个)vfPtr指针指向虚函数

时间溜走了的博客 1195

【小白指南】如何将deepseek引入WPS\Word\Excel中去?

如何将deepseek引入WPS\Word\Excel中去?纯小白都能看的懂,一步步操作就能行

2503_90498422的博客 1万+

【C++】使用sizeof计算类对象所占空间大小-sizeof总结

【C++】使用sizeof计算类对象所占空间大小-sizeof总结 ...

做一个合格的渣渣 908

FlashBootloader01-基于UDS的Flash Bootloader【架构篇】

文章目录1 Flash Bootloader的依赖项2 Flash Bootloader中使用的UDS的主要功能3 Flash Bootloader更新固件3.1 初始化MCU3.2 刷写流程 1 Flash Bootloader的依赖项 通常Flash Bootloader由以下四方面组成: UDS协议 上位机「编写Bootloader Sequence」 通信驱动(如CAN ) Flash Driver 2 Flash Bootloader中使用的UDS的主要功能 1. 10 02服务 客户端

3589

基于Python的车牌识别系统实现

本文将以基于Python的车牌识别系统实现为方向,介绍车牌识别技术的基本原理、常用算法和方法,并详细讲解如何利用Python语言实现一个完整的车牌识别系统。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 5万+

虚函数表和虚基类引起的类的内存大小的计算

计算一个类对象的大小时的规律: 1、空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同); 2、一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的; 3、因此一个对象的大小≥所有非静态成员大小的总和; 4、当类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable...

weixin_30457065的博客 226

Oracle EBS FA 创建成批增加执行时间长且报错

摘要 Oracle EBS系统在执行"创建成批增"请求时出现长时间运行并报错(ORA-00603和ORA-03114)。

陈显平的专栏-Oracle EBS 173

实现sizeof

//类对象的sizeof,思路:类对象取地址加1 减去类对象地址 #define sizeof_v(x) ((char*)(&x+1) - (char*)(&x)) //类的sizeof,思路:将0转换成类的指针,加1,就是类所占地址大小,再强制转换成size_t #define sizeof_t(x) (size_t)((x*)0+1) //对齐:将v按b的...

weixin_30410999的博客 226

YOLO26 标签分配机制:STAL 小目标感知分配策略

YOLO26提出的STAL标签分配策略通过尺度感知机制优化了小目标检测性能。该方法根据目标面积将检测对象分为小、中、大三类,分别采用差异化的分配参数(TopK数量、IoU阈值和中心度权重),特别是对小目标采用更宽松的匹配条件和更高的中心度权重。实验结果表明,STAL策略显著提升了小目标检测精度(AP_small),同时保持了整体检测性能(mAP),为解决目标检测中尺度不平衡问题提供了有效方案。

一键难忘的博客 787

零基础DSP实战TMS320F28035:第九节,ADC比较器&EPWM

ADC比较器框图如下所示:-电压-----------------------------输出-电压A>电压B------------------ 1-电压A

sinat_30943509的博客 2535

C++类对象模型

类对象模型是一种编程概念,用于描述和实现面向对象编程(OOP)中的类和对象。在这个模型中,类定义了对象的结构和行为,包括数据成员(属性)和成员函数(方法)。对象是类的实例,具有类的所有属性和方法。类对象模型支持封装、继承和多态等OOP特性,使得代码更加模块化、可重用和易于维护。通过类对象模型,程序员可以创建复杂的软件系统,提高开发效率和代码质量。类对象的存储方式是按照只保存成员变量,成员函数存放在公共的代码段一个类的大小,实际就是该类中”成员变量”之和,须要注意内存对齐。

qq_74013365的博客 1679

论文复现《基于最大李雅普诺夫指数的电力系统暂态电压稳定评估方案》

电力系统暂态电压稳定评估方案 摘要 本研究提出了一种基于最大李雅普诺夫指数的电力系统暂态电压稳定评估方法。通过分析相空间中相邻轨迹的收敛或发散特性,该方法能够提前判别系统稳定性。论文首先阐述了暂态电压稳定机理,详细介绍了最大李雅普诺夫指数的计算方法。针对IEEE-39节点系统,建立了仿真模型并获取不同故障场景下的数据。研究开发了完整的评估程序,包括数据预处理、相空间重构、指数计算等模块,并通过与时域仿真结果的对比验证了方法的准确性。实验结果表明,该方法能够快速有效地评估电力系统的暂态电压稳定性,为系统安全运

max500600的博客 186

C++一个类对象的大小计算

计算一个类对象的大小时的规律:  1、空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同); 2、一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的; 3、因此一个对象的大小≥所有非静态成员大小的总和(包括动态分配的变量...); 4、当类中声明了虚函数(不管是1个还是多个),那么在实例...

banqiutu9162的博客 657

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++奇迹之旅:探索类对象模型内存的存储猜想

上回我们学习了类的定义,初步了解了什么是类?publicprivateprotected,本小节将讲解类的实例化,类对象模型的猜想存储,及三种简单类的计算。在 C++ 中,类的实例化是指创建一个类的对象。当我们定义了一个类之后,就可以根据这个类创建出多个对象。这个过程就称为类的实例化。

a_sen的博客 8111

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

C++中类对象所占空间的大小

原文链接:http://www.cnblogs.com/easonpan/archive/2012/04/25/2470177.html  首先,平时所声明的类只是一种类型定义,它本身是没有大小可言的。 因此,如果用sizeof运算符对一个类型名操作,那得到的是具有该类型实体的大小。    计算一个类对象的大小时的规律:  空类、单一继承的空类、多重继承的空类所占空间大小为

CLN的专栏 758

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C++类对象大小的计算

(一)常规类大小计算 C++类对象计算需要考虑很多东西,如成员变量大小,内存对齐,是否有虚函数,是否有虚继承等。接下来,我将对此举例说明。 以下内存测试环境为Win7+VS2012,操作系统为32位 一、完全空类 [cpp]view plaincopy #include<iostream> usingnamespace...

daru9708的博客 482

C++类的存储及类对象内存结构

本文分两部分,前半部分讲类的存储后半部分讲类的内存结构。 C++类的存储 c++中最重要的就是类,那么一个类的对象,它在内存中如何存储的?它占 内存中多少个字节? 首先确定类的构成: 1,数据成员:可以是内置类型,类类型。 2,函数成员:虚函数,非虚函数 1)数据成员 内置类型对齐原则 内置类型就是常用的:char,short,long,int,float,double. 这些内

fenxinzi557的博客 2万+

CPP-类对象大小的组成

实际上由于同一个类的每个对象中只有变量不一样,而函数代码都是一样的,所以没有必要每个对象都存一份函数代码。4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。要计算一个类对象的大小要先明白一个问题:类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

m0_74358683的博客 325
下一篇: C++日期类的实现
fiskerzero
博客等级 码龄8年 0粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值