当前位置: 首页 > article >正文

C++性能相关的部分内容

C++性能相关的部分内容

与底层硬件紧密结合

大端存储和小端存储(硬件概念)
C++在不同硬件上运行的结果可能不同
比如:输入01234567,对于大端存储的硬件会先在较大地址上先进行存储,而对于小端存储的硬件会先在较小地址上进行存储
数据的高位部分存于高位字节,且在内存地址中,大端模式下高位字节存于低地址,小端模式下存于高地址
01234567(高位字节->低位字节)
内存地址(低地址->高地址)

大小端存储会对以下方面造成影响:
数据存储和读取

  • 对于多字节数据类型,如intfloat等,在不同大小端存储模式下,数据在内存中的存储顺序不同。大端模式下,数据的高位字节存于低地址,低位字节存于高地址;小端模式则相反。这就导致在读取数据时,如果程序没有考虑到硬件的大小端特性,可能会读取到错误的数据。例如,在一个小端模式的系统中存储了0x12345678,如果按照大端模式去读取,就会将其解读为0x78563412,与实际存储的值不同。
    网络通信
  • 在网络通信中,不同的设备可能采用不同的大小端存储方式。如果发送方和接收方的大小端设置不一致,就需要进行数据转换,否则会导致数据传输错误。例如,一台大端模式的计算机向一台小端模式的计算机发送一个int类型的数据0x12345678,接收方按照小端模式接收后,会将数据存储为0x78563412,与发送方发送的数据不一致。为了解决这个问题,网络协议通常会规定统一的字节序,如TCP/IP协议使用大端序(网络字节序),在发送数据时,发送方需要将数据转换为网络字节序,接收方收到数据后再转换为本地字节序。
    文件格式
  • 一些文件格式也会对数据的存储字节序有规定。例如,BMP图像文件格式规定使用小端序存储图像数据。如果在读取BMP文件时,没有按照小端序来解析数据,就无法正确读取图像的像素信息,导致图像显示错误。同样,在处理其他文件格式如音频文件、视频文件等时,也需要根据文件格式的规定来正确处理大小端问题,以确保能够正确地解析和处理文件中的数据。
    跨平台编程
  • 当编写跨平台的程序时,由于不同的硬件平台可能采用不同的大小端存储模式,程序员需要特别注意处理大小端问题,以确保程序在各种平台上都能正确运行。例如,在一个同时支持大端和小端平台的程序中,如果直接对多字节数据进行存储和读取,而没有考虑大小端差异,那么在不同平台上运行时可能会得到不同的结果。为了避免这种情况,程序员可以使用一些特定的函数或宏来进行大小端转换,或者采用一些与平台无关的方式来存储和处理数据,如使用网络字节序来存储和传输数据,在需要时再进行本地字节序的转换。

对象生命周期的精确控制

C++与C#的对象生命周期
1.C#语言中,对象使用完毕后由垃圾回收系统自动销毁,程序员无需关注销毁操作。
(易用性但由于额外引入垃圾回收系统这个额外机制而造成性能损耗)
2.C++中,对象的生命周期由程序员精确控制,包括构造和销毁。(程序员显式的做这件事)
3.这种设计差异主要取决于易用性和性能之间的取舍。

对象生命周期精确控制的好处
1.精确控制对象生命周期可以避免引入额外的垃圾回收系统,从而提升性能
2.及时释放对象资源可以使资源得到更有效的利用
3.通过编译器优化,某些语言特性在编译时执行,进一步提升了性能。

C++和C#的异常处理机制
1.C++中使用try-catch语句来处理异常,try语句体中构造的对象需要在抛出异常后显式销毁。
2.C#中使用try-catch-finally语句,try语句体中构造的对象无论是否抛出异常都会被销毁。(在Finally中被销毁)
3.这种差异源于C++对对象生命周期的精确控制。

左侧C++异常处理机制、右侧C#异常处理机制

对象生命周期精确控制的好处
1.精确控制对象生命周期可以避免引入额外的垃圾回收系统(占用额外的系统资源),从而提升性能。
2.及时释放对象资源可以使资源得到更有效的利用。
3.通过编译器优化,某些语言特性在编译时执行,进一步提升了性能。

Zero-Overhead Abstraction

理解Zero-Overhead Abstraction(零开销抽象)
在 C++ 编程中,C++ 有很多复杂的特性,像模板、多态等。当你写代码时,如果某个程序只用到了基本的数据类型和简单的函数,没用到模板特化或者复杂的多态机制,那程序在运行的时候,就不会因为这些没用到的特性,额外占用内存空间或者让运行速度变慢。也就是说,C++ 不会把那些你不用的特性所带来的开销,强加到你的程序上,这样能让程序更高效地运行

1.Zero Overhead Abstraction意味着不为未使用的语言特性支付成本。
2.虚函数会增加程序的运行时开销,但如果类中没有定义虚函数,则不支付虚函数的成本。
3.C++通过编译器优化,在编译时执行某些函数,避免了运行时的开销。

http://www.lryc.cn/news/2386035.html

相关文章:

  • Spring Boot 项目中常用的 ORM 框架 (JPA/Hibernate) 在性能方面有哪些需要注意的点?
  • 基于大模型的大肠癌全流程预测与诊疗方案研究报告
  • 解决DeepSeek部署难题:提升效率与稳定性的关键策略
  • AI进行提问、改写、生图、联网搜索资料,嘎嘎方便!
  • GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo
  • 2021年认证杯SPSSPRO杯数学建模A题(第二阶段)医学图像的配准全过程文档及程序
  • CV中常用Backbone-3:Clip/SAM原理以及代码操作
  • RPC 协议详解、案例分析与应用场景
  • dify-plugin-daemon的.env配置文件
  • 【Python】开发工具uv
  • 《技术择时,价值择股》速读笔记
  • Python可视化设计原则
  • SAP重塑云ERP应用套件
  • 2025.5.25总结
  • (九)PMSM驱动控制学习---无感控制之高阶滑膜观测器
  • 6个跨境电商独立站平台
  • 电子电路:电学都有哪些核心概念?
  • SQL进阶之旅 Day 2:基础查询优化技巧
  • 时序数据库 TDengine × Superset:一键构建你的可视化分析系统
  • 一键化部署
  • Win 系统 conda 如何配置镜像源
  • Devicenet主转Profinet网关助力改造焊接机器人系统智能升级
  • 《STL--list的使用及其底层实现》
  • whisper相关的开源项目 (asr)
  • python的pip怎么配置的国内镜像
  • PCB 通孔是电容性的,但不一定是电容器
  • 领域驱动设计与COLA框架:从理论到实践的落地之路
  • 公有云AWS基础架构与核心服务:从概念到实践
  • Python60日基础学习打卡D35
  • Python经典算法实战