嵌入式C++——关于C++的效率分析

LiteRT-LM与Llama.cpp终极对决:C++库跑LLM到底哪家强? 本文深入对比了Google的LiteRT-LM与开源Llama.cpp在C++环境下运行大型语言模型的性能差异。通过实测数据,分析了两者在架构设计、模型支持、硬件加速及内存管理等方面的优劣,特别关注了Gemma-3N模型在边缘平台的表现,为开发者提供了选型参考。 阅读详情
嵌入式C++——关于C++的效率分析
顶嵌(TOP-E)|嵌入式linux企业培训|嵌入式Linux就业实训|承接嵌入式项目开发   2008-12-23 17:14:37 作者:顶嵌开源 来源:原创 文字大小:[大][中][小]

C++给我们带来了面向对象的支持,近年来在大型的嵌入式项目中经常被采用,甚至有一些较新的操作系统如eCos,Symbian等都采用C++编写。不过C++在带来一些便利的同时,也引入了很多昂贵的特性。随着在嵌入式开发领域使用C++作为开发语言的公司和项目越来越多,有不少原来工作在桌面开发领域的C++程序员加入了嵌入式开发的阵营。对于这些由桌面开发转入嵌入式开发中的C++开发来说,需要特别注意程序的效率和资源占用情况,了解哪些C++特性可能带来执行时间和代码大小上的昂贵开销,并在有可能的情况下避免使用。

 

  •  类和对象

C++中引入了类的概念,以利于对象的封装,这在嵌入式开发中是完全可以利用的,与C语言中的struct相比,类几乎没有多少更大的开销。公有和私有成员数据及函数的列表与一个 struct 及函数原型的列表没有大的差别。C++编译器能够用public 和 private 关键字决定,哪一个方法调用和数据访问是允许的或者是不允许的,但这个决定在编译的时候完成,所以运行时不会付出代价。单纯的加入类既不会影响代码的大小,也不会影响你的程序的效率,而且还能够有利于对象的封装。

 

  •  默认参数与函数重载

默认参数值也是没有损失的。编译器只是加入代码使得在每次函数被无参数调用的时候传递一个默认的值。类似地,函数名的重载也是编译时的修改。具有相同名字但是不同参数的函数在编译过程中分别分配了一个唯一的名字,每次函数名出现在程序中的时候编译器就替换它,然后连接器正确的把它们匹配起来。这些都几乎不会带来运行时的开销,唯一的缺点是符号表稍微复杂一些。操作符的重载与此类似,几乎没有运行时的开销。

  • 构造、析构、虚函数

构造函数和析构函数会带来一点损失。这些特殊的方法去分别保证每次这种类型的对象在创建或者超出了范围时被调用。然而,这个小量的开销是为减少错误而支付的一个合理代价,是可以被接受的。类似的,虚拟函数也具有一个合理的代价收益比。它的明显代价是在调用虚拟函数之前附加了一个存储查询,而普通的函数和方法调用是不受影响的。由于它是实现多态的基础,且代价比较小,是可以接受的。

  • 昂贵特性

根据一般的经验,比较昂贵的C++特性有模板、异常事件及运行类型识别。这三个特性都对代码的大小有负面的影响,而且异常事件和运行时类型识别还会增加执行时间。在决定是否使用这些特性之前,你可能要做一些实验来看看它们会怎么样影响你自己的应用程序的大小及速度。

 

 

事实上,在嵌入式软件界对于C++是否值得所产生的性能损失的问题一直存有很大的争议。在1996 年,一群日本的芯片厂商联台起来定义了一个C++语言和库的子集,使它更加适合嵌入式软件开发。他们把他们新的工业标准叫作嵌入式C++。作为一个C++标准草案的合适子集,嵌入式C++省略了很多不限制下层语言可表达性的任何可以省略的东西。这些被省略的特性不仅包括像多重继承性、虚拟基类、运行时类型识别和异常处理等昂贵的特性,而且还包括了一些最新的添加特性,比如:模板、命名空问、新的类型转换等。所剩下的是一个C++的简单版本,它仍然是面向对象的并且是C 的一个超集,但是它具有明显更少的运行开销和更小的运行库。对嵌入式C++有兴趣的读者可以到这里查看Embedded C++的详细定义(Specification):http://www.caravan.net/ec2plus/spec.html。

 

 

来自:http://www.top-e.org/jiaoshi/html/?173.html

log4cpp vs spdlog:C++日志库性能对比与选型指南(2024实测版) 本文基于2024年实测数据,深入对比了log4cpp与spdlog两大C++日志库在架构设计、性能表现、平台适配及高级功能上的差异。spdlog凭借其零分配、无锁队列等现代设计,在多线程高并发场景下展现出显著性能优势,尤其适合对性能有严格要求的现代C++项目。log4cpp则以其灵活的三层架构和丰富的功能,在需要复杂日志路由或与Java生态集成的场景中仍有价值。文章为不同应用场景提供了清晰的选型指南。 阅读详情

相关推荐

学嵌入式要学C++

C++作为一种编程语言,从其诞生之日至今,已经在软件业的历史上扮演了至关重要的角色。它强大的语言功能和灵活的语言机制是无数程序员为之折腰。而C++中蕴含的OO,GP等编程思想,更是潜移默化的影响了软件的架构方法。从这个层面上讲,C++的影响已经不仅仅是一门编程语言这样简单。今天,我们来看一看C++语言在另一块群雄纷争的领域上的身影。 嵌入式系统编程 “嵌入式”是一个很大的话题,它涉及的领域相当广泛...

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1407

C++在嵌入式中表现如何?

这是知乎嵌入式领域的一个热门话题,原文链接:https://www.zhihu.com/question/374663834几个高赞回答:idea4good:先说结论:嵌入式、单片机里面...

2306

程序优化的方法(C/C++)

对程序进行优化, 通常是指优化程序代码或程序执行速度。优化代码和优化速度实际上是一个予盾的统一, 一般是优化了代码的尺寸, 就会带来执行时间的增加, 如果优化了程序的执行速度, 通常会带来代码增加的副作用, 很难鱼与熊掌兼得, 只能在设计时掌握一个平衡点。

【C++与C区别】嵌入式C改C++的一些浅显区别(大佬勿进)

以QP为例,嵌入式C++与C的浅显区别

qq_39030013的博客 966

单细胞数据互转实战:从Scanpy的h5ad到Seurat对象的四种高效方法

本文针对单细胞数据分析中Scanpy的h5ad格式与Seurat对象互转的常见难题,详细对比了SeuratDisk、anndataR、schard和sceasy四种高效转换方法。文章从实战出发,剖析了每种方法的原理、操作流程、优缺点及避坑指南,并提供了清晰的选型策略,帮助用户根据数据特点选择最佳方案,实现跨平台数据的无缝衔接。

weixin_29099217的博客 446

Nmap的介绍、安装 并进行网络扫描

Nmap概述 Nmap(Network Mapper(网络映射器))是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。 正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

Cheney ' blog 2万+

C与C++比较(网友观点整理)

1、C简单 2、C更加灵活(这是C的优势,也可以说是它的缺点) 3、C效率高 4、C更加适合底层系统的开发,做这种系统级软件开发的,都会自己在底层封自己的API。所以,C更加接近硬件,就会成为首选。 而C++面向对象的思想,以及丰富的API,更加适合应用层面软件的开发。 C的优势是程序小,速度快!C++接近,那还是C的快!这没说的! C++的优势是开发更简单,系统比较的大的时

Jimmy_Lee 2400

实用电路精讲系列---双级运放放大电路(差分放大+跟随缓冲)

本文分析了双极运放放大电路的工作原理及其典型应用。该电路结合差分放大器和跟随缓冲器,实现高精度信号放大与阻抗匹配。差分放大器通过放大差模信号并抑制共模噪声提升信噪比;跟随缓冲器则提供阻抗变换,确保信号稳定传输。两者协同工作可优化输入阻抗、增强噪声抑制并提高设计灵活性。文章还列举了10个典型应用案例,包括医疗设备、工业传感器和新能源系统等,展示了该电路在精密电子系统中的关键作用。最后通过实用电路分析,详细说明了各模块功能及设计注意事项。

weixin_40590799的博客 2953

嵌入式C/C++开发者效率提升指南

关注+星标公众号,不错过精彩内容来源 |Incredibuild嵌入式开发提升效率的方法有很多,可能初学者不怎么关心开发效率。但对于有一定开发经验的工程师,特别是参与开发过多款产品的工程师就比较重视开发效率。新手开发产品,大多都会重复“造轮子”,迟迟不能按时完成开发任务。有经验的工程师都会根据需求先构思,再编码、再优化完善,也会注重代码移植性、兼容性等,使其在最短时间完成任务。同时,也使代码更加...

strongerHuang 965

weblogic 集群搭建,双机部署,相关问题记录

4.5.集群搭建1 参考网址https://wenku.baidu.com/view/76365129cd1755270722192e453610661ed95aa4.html IP地址 端口 角色 192.168.1.160 9001 AdminServer ...

zl386119974的专栏 1669

黏菌优化算法(SMA)详解:从生物智能到优化引擎

黏菌优化算法(SMA)是一种新型生物启发式优化算法,模拟多头绒泡菌的智能觅食行为。该算法包含接近食物、包围食物和抓取食物三个阶段,通过数学模型将生物行为转化为优化过程。SMA采用权重自适应机制和参数振荡模型实现探索与开发的平衡,具有参数简单、收敛性好等优势。算法可通过MATLAB/Python实现,并应用于函数优化、工程设计和神经网络训练等领域。研究表明SMA在求解复杂优化问题时表现优异,未来可通过混沌增强、混合策略等方式进一步提升性能。

qq_42212808的博客 659

应用C++特性提高执行速度及节省内存空间(1)

曾经看到一段话大意是:好的设备是为用户准备的,而不是为程序员准备的。您可以通过以下链接下载该文章:http://download.youkuaiyun.com/source/256005 

Dreamcode ~ All in AI 1873

【Scratch考级100图】图01-等级考试scratch绘 画正方形

一、案例介绍 小朋友们应该在数学课或者平时生活中有了解过正方形,正方形在我们生活中到处可见,那我们如果通过Scratch软件来绘制一个正方形呢,我们一起来学习一下吧,在舞台正中央绘制一个边长为200的正方形,要求: 1、围绕舞台中心绘制正多边形,均匀分布在四个象限中 2、正方形边长为200个单位,线条粗细、颜色自定 3、利用画笔绘制正方形,不能有多余的线条 二、案例演示 【Scratch案例演示】Scratch图1-画正方形 三、案例分析 当我们点击小绿旗启动程序后,舞台上会出现一个画

青少年编程学习指导 2669

嵌入式C++——关于C++的效率分析(顶嵌开源)

 C++给我们带来了面向对象的支持,近年来在大型的嵌入式项目中经常被采用,甚至有一些较新的操作系统如eCos,Symbian等都采用C++编写。不过C++在带来一些便利的同时,也引入了很多昂贵的特性。随着在嵌入式开发领域使用C++作为开发语言的公司和项目越来越多,有不少原来工作在桌面开发领域的C++程序员加入了嵌入式开发的阵营。对于这些由桌面开发转入

向远处看的专栏 885

锂电池的充电和放电曲线解读

锂电池充放电曲线是反映其性能的关键指标。充电曲线分为恒流和恒压两阶段:恒流阶段电压快速上升,恒压阶段电流逐渐降低;放电曲线则呈现平台期和快速衰减期特征。这些曲线受温度、充放电倍率及材料体系(如三元锂或磷酸铁锂)显著影响。通过分析曲线特征,可优化电池管理系统,实现精准的SOC估算、快充策略制定及故障诊断,从而在电池性能与安全性间取得平衡。不同应用场景(如新能源汽车或消费电子)对曲线形态有特定要求。

start_up_go的博客 5063

华为OD机试 - 最佳对手(Python/JS/C/C++ 2025 A卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。游戏里面,队伍通过匹配实力相近的对手进行对战。但是如果匹配的队伍实力相差太大,对于双方游戏体验都不会太好。给定n个队伍的实力值,对其进行两两实力匹配,两支队伍实例差距在允许的最大差距d内,则可以匹配。要求在匹配队伍最多的情况下,匹配出的各组实力差

学Java,找哪吒 1379

Parasoft C++test嵌入式测试资源集:提升嵌入式开发效率的利器

Parasoft C++test嵌入式测试资源集:提升嵌入式开发效率的利器 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在嵌入式开发领域,代码质量和测试效率是决定项目成败的关键因素。为了帮助开发人员更好地应对这些挑战,我们推出了“Parasoft C++test嵌入式测试资源集”。这个资源集包含了丰富的文档和指南,旨在帮助开发人员深入理解和高效使用Parasoft ...

gitblog_09766的博客 882

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VSCode IntelliSense卡顿?可能是c_cpp_properties.json里**用错了!性能调优指南

本文深入分析了VSCode IntelliSense卡顿的常见原因,特别是`c_cpp_properties.json`中滥用`**`递归通配符导致的性能问题。通过实测数据和优化策略,提供了精确路径配置、分层配置法和利用`compile_commands.json`等解决方案,帮助开发者提升大型C++项目的开发效率。

weixin_28829479的博客 297

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

探索POCO C++:嵌入式开发者的利器

探索POCO C++:嵌入式开发者的利器 【下载地址】POCOC中文学习资料 本仓库提供了一份关于POCO C++的中文学习资料,旨在帮助开发者更好地理解和使用POCO C++库。POCO C++是一个开源的C++类库集合,主要用于简化、加速网络和可移植应用程序的开发。该类库与C++标准库紧密集成,填补了标准库在某些功能...

gitblog_06600的博客 1116

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Parasoft C++test嵌入式测试资源集

Parasoft C++test嵌入式测试资源集 去发现同类优质开源项目:https://gitcode.com/ 本仓库提供了一个名为“parasoft C++test嵌入式测试集.rar”的资源文件下载。该资源文件包含了以下内容: C++test嵌入式测试.pdf 详细介绍了如何使用Parasoft C++test进行嵌入式测试的相关内容。 C++test针对Keil 5项目STM32...

gitblog_09751的博客 538

手把手教你开发C++模型量化工具,嵌入式AI部署效率提升10倍

掌握嵌入式AI部署难题?本文详解嵌入式AI的C++模型量化工具开发,通过低精度推理与内存优化,提升部署效率10倍。适用于边缘设备、IoT场景,支持INT8量化与算子融合。方法实用,性能显著,值得收藏。

StepLens的博客 750

【探寻C++之旅】第二十八章:嵌入式C++的优化之道

通过以下指标评估优化效果: $$ \text{效能提升比} = \frac{T_{\text{原始}}}{T_{\text{优化}}} \times 100% $$ $$ \text{内存压缩率} = \left(1 - \frac{S_{\text{优化}}}{S_{\text{原始}}}\right) \times 100% $$使用Q格式处理小数: $$ x_{Qn} = \frac{ \text{int} }{2^n} $$在嵌入式系统中,资源约束严格,优化需兼顾性能、内存与功耗。

2501_93895855的博客 316

C++语言的嵌入式系统

C++作为一种强大的编程语言,凭借其面向对象、泛型编程、丰富标准库等特性,在嵌入式系统开发中展现出了巨大的优势。然而,其在资源占用和实时性等方面的挑战也提醒着开发者在实际应用中谨慎选择。随着技术的进步,C++在嵌入式系统中的应用将会更加广泛和深入。开发者在掌握C++的同时,也需要关注嵌入式系统的发展动态,以便在快速变化的科技环境中立于不败之地。

2501_90467750的博客 450

C++是鸡肋???

C++是鸡肋???

weixin_55751709的博客 405
上一篇: 可重入函数与线程安全函数
下一篇: 读Kernel感悟-Linux内核启动-BIOS
TopEmbedded
博客等级 码龄18年 58粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值