嵌入式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

正弦波产生电路_文氏桥振荡

本文以文氏桥振荡为基础产生正弦波,介绍了原理、计算、应用时需要注意的一些点,并给出了实测可用的电路模板

白鹤忘机的博客 3万+

用MATLAB从零实现六足机器人步态仿真:交替三角与波动步态保姆级教程

本文详细介绍了如何使用MATLAB从零实现六足机器人的两种经典步态仿真:交替三角支撑步态和波动步态。通过参数定义、相位设置、运动轨迹生成和三维可视化等步骤,帮助读者掌握六足机器人步态规划的核心技术。教程包含完整代码和详细解析,适合机器人爱好者和相关专业学生学习实践。

weixin_26765363的博客 226

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

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

Jimmy_Lee 2400

平衡小车动力学建模

两轮自平衡小车由车体和双轮两部分组成,可以看成一个移动的倒立摆,分别对车轮和车体进行力学分析,建立动力学模型,最后,通过对两者的分析给出系统的状态空间表达式。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjiPEUVJ-1679470559950)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230322110521545.png)]

qq_23096319的博客 9053

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

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

strongerHuang 965

【VeriStand】从零构建HIL测试平台:核心概念、硬件选型与实战配置指南

本文详细介绍了如何从零构建HIL测试平台,涵盖核心概念、硬件选型与实战配置指南。重点解析了VeriStand生态系统的优势,包括开箱即用特性、与LabVIEW的黄金搭档配合及Python支持。通过实战案例和硬件选型建议,帮助工程师高效搭建可靠的HIL测试平台,提升测试效率与安全性。

weixin_29250573的博客 329

使用libVLC进行视频截图的C/C++实现

通过这些代码,你可以在C/C++应用程序中实现视频截图功能,并将视频帧保存为图像文件。请注意,本文只提供了基本的示例代码,你可以根据自己的需求进行扩展和修改。libVLC是一个强大的开源多媒体框架,可以用于在C/C++应用程序中处理和播放音频和视频文件。我们将展示如何初始化libVLC,打开视频文件,捕获视频帧并保存为图像文件。在开始编写代码之前,你需要包含libVLC的头文件,并链接相应的库文件。在链接阶段,你需要添加libVLC库的链接选项。在使用libVLC之前,你需要初始化libVLC的实例。

学习使你进步。 470

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

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

Dreamcode ~ All in AI 1873

SoC 内的 CPU、GPU、DSP、NPU 协同执行结构图解析:多异构协同的最新实战体系

随着移动端 AI 能力迅速演进,SoC(System on Chip)内部的多种异构计算单元(CPU、GPU、DSP、NPU)之间的协同执行能力成为衡量芯片智能算力的关键指标。本文基于截至 2025 年 5 月最新主流国产芯片(如海思昇腾、地平线旭日、联发科天玑、高通骁龙 8 Gen 系、寒武纪思元等)在实际落地应用中的公开结构与技术资料,深入解析 CPU-GPU-DSP-NPU 协同执行的体系结构、执行路径与调度逻辑。文章结合 Android NNAPI、Vulkan Compute、自定义调度器等工程实

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 8710

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

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

向远处看的专栏 885

Coverity本地增量C/C++代码检查(Linux)操作简介

Coverity 是一款精确的综合静态分析与应用安全测试 (SAST) 平台,它可以在编写代码时发现关键的缺陷和安全缺陷,防止它们变成安全漏洞、故障或维护缺陷。

1482

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

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

gitblog_09766的博客 882

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

weixin_28829479的博客 297

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

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

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

gitblog_06600的博客 1116

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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、付费专栏及课程。

余额充值