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

基于RK3588与FPGA的SDI视频处理系统:从MIPI CSI-2输入到DSI输出的全链路解析 本文深入解析了基于RK3588与FPGA的SDI视频处理系统全链路。系统利用FPGA作为高速接口转换与流管理核心,将SDI信号转换为MIPI CSI-2数据流送入RK3588进行智能图像处理与AI分析,处理结果再通过MIPI DSI回传,最终由FPGA控制编码为SDI输出,实现了专业视频接口与强大算力的高效协同。 阅读详情


 原文链接:http://www.cnblogs.com/easonpan/archive/2012/04/25/2470177.html

 首先,平时所声明的类只是一种类型定义,它本身是没有大小可言的。 因此,如果用sizeof运算符对一个类型名操作,那得到的是具有该类型实体的大小。

  

计算一个类对象的大小时的规律:

  1.  空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同);
  2. 一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的;
  3. 因此一个对象的大小≥所有非静态成员大小的总和; 
  4. 当类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable;
  5. 虚承继的情况:由于涉及到虚函数表和虚基表,会同时增加一个(多重虚继承下对应多个)vfPtr指针指向虚函数表vfTable和一个vbPtr指针指向虚基表vbTable,这两者所占的空间大小为:8(或8乘以多继承时父类的个数);
  6. 在考虑以上内容所占空间的大小时,还要注意编译器下的“补齐”padding的影响,即编译器会插入多余的字节补齐;
  7. 类对象的大小=各非静态数据成员(包括父类的非静态数据成员但都不包括所有的成员函数)的总和+ vfptr指针(多继承下可能不止一个)+vbptr指针(多继承下可能不止一个)+编译器额外增加的字节。

示例一:含有普通继承

class  A   
 {   
 };  
 
 class  B   
 {   
     char   ch;   
     virtual void func0(){} 
 }; 
 
 class   C  
 {
     char   ch1;  
     char   ch2;  
     virtual void func(){}  
     virtual void func1(){}   
 };
 
 class  D: public A, public C
 {   
     int   in;   
     virtual void func(){} 
     virtual void func1(){}
 };   
 
 class  E: public B, public C
 {   
     int   in;   
     virtual void func0(){} 
     virtual void func1(){}
 };  
 
 //cout<<"A="<<sizeof(A)<<endl;    //result=1
 //cout<<"B="<<sizeof(B)<<endl;    //result=8    
 //cout<<"C="<<sizeof(c)<<endl;    //result=8
 //cout<<"D="<<sizeof(d)<<endl;    //result=12
 //cout<<"E="<<sizeof(e)<<endl;    //result=20

示例二:含有虚继承

class CommonBase
 {
     int co;
 };
 
 class Base1: virtual public CommonBase
 {
 public:
     virtual void print1() {}
     virtual void print2() {}
 private:
     int b1;
 };
 
 class Base2: virtual public CommonBase
 {
 public:
     virtual void dump1() {}
     virtual void dump2() {}
 private:
     int b2;
 };
 
 class Derived: public Base1, public Base2
 {
 public:
     void print2() {}
     void dump2() {}
 private:
     int d;
 };

sizeof(Derived)=32,其在内存中分布的情况如下:

class Derived size(32):
     +---
     | +--- (base class Base1)
 | | {vfptr}
 | | {vbptr}
 | | b1
     | +---
     | +--- (base class Base2)
 | | {vfptr}
 | | {vbptr}
 | | b2
    | +---
 | d
    +---
    +--- (virtual base CommonBase)
 | co
    +---

 原文链接: http://www.cnblogs.com/easonpan/archive/2012/04/25/2470177.html

ESP-01S使用micropython,利用Thonny烧写固件 在家舒服的太久了,想学习点新的东西,这次看上了ESP8266系列的联网设备,想自己做点小玩意出来耍耍,下面跟我一起来学习吧。本篇主要记录固件的烧写及测试。Thonny下载链接不算难,但是网上资源较少。也是提醒自己不要忘记这个步骤,记录一下,也分享给和我一样开始接触的小伙伴,加油加油,万事开头难。 阅读详情

相关推荐

手把手教你用TI MOSFET搭建0-100mA恒流源电路(附避坑指南)

本文详细介绍了如何使用TI MOSFET SI1204D搭建0-100mA恒流源电路,包括基础原理、电路设计、PCB布局和热管理技巧。通过分步指导和避坑指南,帮助工程师实现高精度、低成本的电流控制方案,适用于LED驱动、传感器激励等多种应用场景。

weixin_29310631的博客 482

C++类对象成员变量和成员函数内存分配的问题

(转载自:http://blog.sina.com.cn/s/blog_4feac7b90101keet.html) 很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有成员变量)的内存分配机制是一样的。下面我们以类来说明问题,如果类的问题通了,结构体也也就没问题啦。 类分为成员变量和成员函数,我们先来讨论成员变量。 一个类对象的地址就是类所包含的这一片内存空间的

njustzj001的专栏 9449

3小时学会AI建站!无需编程,个人简历独立站开发速成指南

3小时学会AI建站!个人简历独立站开发速成指南

pei_laoshi的博客 1255

Position属性四个值区别和用法

1、static(静态定位):默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。2、relative(相对定位):生成相对定位的元素,通过top,bottom,left,right的设置相对于其正常(原先本身)位置进行定位。可通过z-index进行层次分级。  3、absolute(绝对定位):生成绝对定位的元素,相对于 s

送你一个大西瓜 1万+

手把手教你用CH340给正点原子ESP8266烧录固件(附串口调试技巧)

本文详细讲解了使用CH340模块为正点原子ESP8266烧录AT固件的完整流程与关键技巧。核心在于烧录时必须使用3.3V供电,并正确连接GPIO0引脚至GND以进入下载模式。文章涵盖了从硬件接线、软件参数配置到烧录后串口调试验证的全步骤,并提供了常见问题排查方案,帮助开发者一次性成功完成固件烧录。

weixin_29201933的博客 231

《派出你的AI同事:WorkBuddy案例实战》067:按行业分类的案例索引

按行业分类的案例索引 —— 《派出你的AI同事:WorkBuddy案例实战》系列文章,配图已统一为规范示意图。

LuckyHanMo的博客 96

sizeof计算对象所占内存的大小详解

sizeof 怎样计算整型数组、字符数组、二维数组、类(是否为菱形继承、是否为虚继承等各种情况)的大小,非常详细的解释!!!

sky_Mata的博客 1万+

避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过

版本锁定:Ultralytics=8.4.2、OpenVINO=2024.0.0、Python=3.10,版本不一致是80%问题的根源;参数对齐:训练/导出/推理的imgsz、归一化、坐标映射必须完全一致,差一步就出错;算子统一:避免自定义算子,优先用YOLO26原生算子(C3k2/PSABlock),确保推理引擎兼容;分步验证:导出后先校验ONNX/IR模型→单图片推理→RTSP流推理→72小时稳定性测试,一步过易踩坑;工业级测试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 510

nginx的error_log和access_log分析

nginx配置中有关日志的配置主要是围绕着下面两个指令: 1、error_log 2、access_log:记录访问日志  首先要强调的一点是,如果access日志和error日志都是常量文件名(因为access支持变量文件名,后续会讲到),那么nginx进程会缓存文件描述符直到进程结束。 什么时候日志的fd会改变呢? 1)进程重启 2)收到了NGX_REOPEN_SIGNAL信号,会

fangru的专栏 1万+

一文速学数模-K-means聚类算法实战:信用卡用户画像聚类分析

该项目算是非常经典的金融业务用户画像的基础分析了,主要根据用户信用卡使用行为数据进行分析,根据收集到的不同字段信息,对每个用户划分类别。这里需要说明一下的是,聚类模型只是将具有相似行为的大部分用户聚集到一个类别里面,这点并不会考虑到每个字段的含义,也就是分成的类别并不是用户价值等级,此类别仅仅是这个类别大体相同的信用卡用户行为对象,并不能给每个用户价值打上标签,那是评价模型做的事,这里要注意不要搞混淆了,用户价值评价是评价模型决定的,而画像是聚类模型分析的。

master_hunter的博客 1万+

MTK(基础篇)ROM烧录以及分区的作用

本文介绍了MTK芯片设备的刷机流程及关键分区功能。首先通过MTK烧录工具加载ROM文件(包括引导文件和分区表),重点解析了各分区的核心作用:preloader类似BIOS负责硬件初始化;lk作为二级引导程序加载内核;vbmeta验证系统完整性;boot包含Linux内核;dtbo调整硬件配置;modem管理通信功能;tee保护生物识别数据;system/vendor分别存放系统核心和硬件驱动。特别指出preloader、vbmeta等关键分区损坏会导致设备变砖,而recovery分区是重要的救砖入口。全文简

weixin_49303682的博客 443

c 通过成员变量地址 获取类对象地址_【C++学习笔记(十二)】之类中成员变量与成员函数的存储...

点上方蓝字开发小鸽获取更多干货在右上方···设为星标★,与你不见不散本文章由公号【开发小鸽】发布!欢迎关注!!!老规矩–妹妹镇楼:一. C++的类中成员变量与成员函数的存储 在C++的类中,虽然将成员变量与成员函数风筝在了一起,但是他们是分开存储的。C++的非静态成员变量是属于类对象的,占类对象的空间成员函数却...

weixin_30802909的博客 362

RK3568平台(camera篇)点亮imx586摄像头

mipi摄像头硬件确认点:1.供电:5V,2.8V,1.2V,1.8V,reset脚(硬拉3.3,上电的时候从低到高),pwron脚外接3.3V。2,时钟:MCLKOUT是24兆时钟。3.4组差分mipi线。mipi的data线的波形为方波。

weixin_49303682的博客 7257

C++中 没有数据成员的类的对象所占的内存空间大小问题

情况一:没有继承关系 在C++中,我们常常遇到一个类的对象在内存中所占存储空间大小的问题。 现在将自己知道的东西罗列如下: class test { public: (void) test() {} (void)~test() {} private: } 对于上面的类的对象进行求sizeof()。得到的结果是 1。 原因是,对于一个没有数据成员的类对象来说,如果不给其分配存储控件的话,那么该类的所有对象都是一样的。就没有办法区分该类的对象。所以编译器在内存中会为本类..

等闲的博客 936

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

一个类的实例化对象所占空间的大小?

一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小. 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。 如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等于所有

lichunming83的专栏 3837

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

做一个合格的渣渣 908

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

sizeof() 类大小,空类大小

一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小. 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的。 用sizeof运算符对一个类型名操作,得到的是具有该类型实体的大小。 如果 Class A; A obj; 那么sizeof(A)==sizeof(obj) 那么sizeof(A)的大小和成员的大小总和是什么关系呢,很简单,一个对象的大小大于等...

枯树无花 516

对象的大小

A类:int型占4字节,char型占1字节,但由于对齐数的关系,char会先占一个字节,再空3个字节,下面才是int型4个字节,所以一共是8个字节。其实函数指针是不需要存储的,函数指针是⼀个地址,调用函数被编译成汇编指令[call 地址], 其实编译器在编译链接时,就要找到函数的地址,不是在运行时找,只有动态多态是在运行时找,就需要存储函数地址。再分析一下,对象中是否有存储指针的必要呢,Date实例化d1和d2两个对象,d1和d2都有自独立的成员变量,_year/_month/_day存储各自的数据,

q38491的博客 781

C++类对象创建全解析:从构造函数到内存管理

即设置编译器按照n个字节对齐,n可以取值1,2,4,8,16.在C++中也可以使用这个设置,最终的对齐效果将按照 #pragma pack 指定的数值和类中最大的数据成员长度中,比较小的那个的倍数进行对齐。构造函数的参数也可以按从右向左规则赋默认值,同样的,如果构造函数的声明和定义分开写,只用在声明或定义中的一处设置参数默认值,一般建议在声明中设置默认值。数据成员初始化的顺序与其声明的顺序保持一致,与它们在初始化列表中的顺序无关(但初始化列表一般保持与数据成员声明的顺序一致)。

m0_74696257的博客 1087

C++中的类的大小详解

当我们按照不同的的顺序排列变量的时候会发现,类的大小是不尽相同的。第一种情况,MyStruct中的两个布尔连在一起,如果后面没有变量,编译器会自动填充2个字节;而现在后面还有一个整形i,整形跨越了两个4字节,在读取整形的时候需要两个4字节,因此编译器会在这种情况下也会在i1填充2个字节,从而是i1在下一个字节开始。我们可以看到,在创建类的对象中,真正占据栈空间的只有两个成员变量,分别为4个字节。在使用类的指针的时候,如果类的的大小为0,那么排在一起的几个空类地址都是一样的话,我们又怎么知道是哪个呢?

raoxiaoz0425的博客 142

C++学习笔记(4)——sizeof

1、使用sizeof计算不同变量所占空间   假设在32为操作系统环境下,代码如下: char str[] = "Hello"; char *p = str; int n = 10; sizeof(str) = ___; sizeof(p) = ___; sizeof(n) = ___; void Func(char str[100]) { sizeof(str) = ___; } void *p = malloc(100); sizeof(p) = ___;   答案: 6 4 4 4 4   解释

此心安处是吾乡 877

C++ 对象模型

成员变量与成员函数分开存储,只有非静态成员变量才属于类的对象上 空对象内存占用空间为1byte,为了保证空对象的唯一性,确保每一个对象都有一个独一无二的内存空间,因此分配1byte内存空间 #include <iostream> class Person { }; class Person2 { int m_a;//非静态成员变量属于类对象 static int m_b;//公用一份,不属于类对象 void func() {}//与非静态成员变量分开存储,不属于类对象

buzeng8617的博客 110

c++的sizeof使用细节

【代码】c++的sizeof使用细节。

2401_87474728的博客 1088
上一篇: C++:在多重继承时的指针转换问题
下一篇: C++自定义类型转换符
静水若流深
博客等级 码龄14年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值