C++核心指导原则: 性能部分

C++ Core Guidelines 整理目录

  1. 哲学部分
  2. 接口(Interface)部分
  3. 函数部分
  4. 类和类层次结构部分
  5. 枚举部分
  6. 资源管理部分
  7. 性能部分

Per: Performance

Per.1: Don’t optimize without reason

  • 翻译: 不要无理由地进行优化.
  • 原因: 优化应基于实际需求和性能瓶颈分析, 避免过早或不必要的复杂性.

Per.2: Don’t optimize prematurely

  • 翻译: 不要过早优化.
  • 原因: 在项目初期, 优先关注功能实现和代码质量, 等到性能问题明确时再进行针对性优化.

Per.3: Don’t optimize something that’s not performance critical

  • 翻译: 不要优化非性能关键的部分.
  • 原因: 集中精力在真正影响性能的关键路径上, 避免浪费时间和资源. 优化之前一定要做性能测试, 找到真正的性能瓶颈, 再着手进行优化.

Per.4: Don’t assume that complicated code is necessarily faster than simple code

  • 翻译: 不要假设复杂的代码一定比简单的代码快.
  • 原因: 简单的代码通常更容易维护且编译器能够更好地优化, 复杂的代码反而可能导致性能下降.

Per.5: Don’t assume that low-level code is necessarily faster than high-level code

  • 翻译: 不要假设低级代码一定比高级代码快.
  • 原因: 高级语言特性和库函数往往经过高度优化, 使用它们可以提高开发效率而不牺牲性能.

Per.6: Don’t make claims about performance without measurements

  • 翻译: 没有测量数据不要对性能下结论.
  • 原因: 使用基准测试和性能分析工具来验证假设, 确保优化措施确实有效.

Per.7: Design to enable optimization

  • 翻译: 设计时考虑优化的可能性.
  • 原因: 提前规划好架构和接口设计, 为后续的优化工作打下基础.

Per.10: Rely on the static type system

  • 翻译: 依赖静态类型系统.
  • 原因: 利用 C++的静态类型检查机制, 在编译期捕获错误并生成高效的代码.

Per.11: Move computation from run time to compile time

  • 翻译: 尽量将运行时计算移到编译时.
  • 原因: 减少运行时开销, 利用模板元编程和常量表达式等特性提前完成计算.

Per.12: Eliminate redundant aliases

  • 翻译: 消除冗余别名.
  • 原因: 避免不必要的类型转换和名称混淆, 保持代码清晰简洁.

Per.13: Eliminate redundant indirections

  • 翻译: 消除冗余间接操作.
  • 原因: 减少指针和引用的层级嵌套, 直接访问数据以提高性能.

Per.14: Minimize the number of allocations and deallocations

  • 翻译: 尽量减少分配和释放操作的次数.
  • 原因: 分配和释放内存是昂贵的操作, 减少其频率可以显著提升性能.

Per.15: Do not allocate on a critical branch

  • 翻译: 不要在关键路径上进行分配.
  • 原因: 关键路径上的内存分配可能导致性能瓶颈, 尽量预先分配或使用对象池等技术.

Per.16: Use compact data structures

  • 翻译: 使用紧凑的数据结构.
  • 原因: 减少内存占用和缓存未命中率, 提高数据访问效率.

Per.17: Declare the most used member of a time-critical struct first

  • 翻译: 在时间关键的结构体中, 首先声明最常用的成员.
  • 原因: 通过合理布局数据成员, 减少内存对齐带来的额外开销, 提高访问速度.

Per.18: Space is time

  • 翻译: 空间即时间.
  • 原因: 优化内存布局和使用方式, 减少不必要的内存消耗, 从而间接提升执行效率.

Per.19: Access memory predictably

  • 翻译: 可预测地访问内存.
  • 原因: 顺序访问内存块可以充分利用 CPU 缓存, 避免随机访问导致的性能下降.

Per.30: Avoid context switches on the critical path

  • 翻译: 避免在关键路径上发生上下文切换.
  • 原因: 上下文切换会带来显著的性能开销, 特别是在高并发场景下, 尽量减少或消除关键路径上的线程切换, 以保证系统的响应速度和吞吐量.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/975571.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ue5 Arch vis AI traffic system 车辆系统添加不同种类的车

一、前置条件 资源包拥有二、步骤 添加第二辆车 在父级蓝图底下创建子级蓝图 打开子级蓝图 替换骨骼网格体 创建动画蓝图,骨骼选择该骨骼网格体的骨骼 连接动画蓝图 添加动画蓝图 添加资源包

3分钟idea接入deepseek

DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型,背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术,拥有多个版本的模型,如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等&…

ChatGPT平替自由!DeepSeek-R1私有化部署全景攻略

一、DeepSeek-R1本地部署配置要求 (一)轻量级模型 ▌DeepSeek-R1-1.5B 内存容量:≥8GB 显卡需求:支持CPU推理(无需独立GPU) 适用场景:本地环境验证测试/Ollama集成调试 (二&a…

搭建 Hadoop 3.3.6 伪分布式

搭建 Hadoop 3.3.6 伪分布式 IP 192.168.157.132 初始化操作 更改yum源 # 1_1.安装Wget yum install wget# 1_2.备份CentOS-Base.repo文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak# 2.下载阿里yum源配置 wget -O /etc/yum.repos.d/Cen…

nodejs:vue 3 + vite 作为前端,将 html 填入<iframe>,在线查询英汉词典

向 doubao.com/chat/ 提问: node.js js-mdict 作为后端,vue 3 vite 作为前端,编写在线查询英汉词典 后端部分(express js-mdict ) 详见上一篇:nodejs:express js-mdict 作为后端&#xff…

计算机网络真题练习(高软29)

系列文章目录 计算机网络阶段练习 文章目录 系列文章目录前言一、真题练习总结 前言 计算机网络的阶段练习题,带解析答案。 一、真题练习 总结 就是高软笔记,大佬请略过!

医疗AI领域中GPU集群训练的关键技术与实践经验探究(下)

五、医疗 AI 中 GPU 集群架构设计 5.1 混合架构设计 5.1.1 参数服务器与 AllReduce 融合 在医疗 AI 的 GPU 集群训练中,混合架构设计将参数服务器(Parameter Server)与 AllReduce 相结合,能够充分发挥两者的优势,提升训练效率和模型性能。这种融合架构的设计核心在于根…

@Configuration与 @Component的差异

继承关系 Configuration确实可以视为Component的派生注解。从源码层面来看,Configuration本身通过元注解方式标记了Component,这意味着所有被Configuration注解的类本质上也会被Spring识别为组件(Component)。这种设计使得Config…

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…

Deepseek首页实现 HTML

人工智能与未来:机遇与挑战 引言 在过去的几十年里,人工智能(AI)技术取得了突飞猛进的发展。从语音助手到自动驾驶汽车,AI 正在深刻地改变我们的生活方式、工作方式以及社会结构。然而,随着 AI 技术的普及…

20250223学习记录

之前HDFview查看.hdf5文件的时候,看到土壤湿度数据是分为AM和PM,当时我有一个这样的疑问 但是后来用Python处理的时候,直接就是对整个的.hdf5文件处理,当时没有注意这一块,所以就没有这个疑问了。 今天突然看到一篇论…

Rust编程语言入门教程 (七)函数与控制流

Rust 系列 🎀Rust编程语言入门教程(一)安装Rust🚪 🎀Rust编程语言入门教程(二)hello_world🚪 🎀Rust编程语言入门教程(三) Hello Cargo&#x1f…

C++的allactor

https://zhuanlan.zhihu.com/p/693267319 1 双层内存配置器 SGI设计了两层的配置器,也就是第一级配置器和第二级配置器。同时为了自由选择,STL又规定了 __USE_MALLOC 宏,如果它存在则直接调用第一级配置器,不然则直接调用第二级配…

DeepSeek R1/V3满血版——在线体验与API调用

前言:在人工智能的大模型发展进程中,每一次新模型的亮相都宛如一颗投入湖面的石子,激起层层波澜。如今,DeepSeek R1/V3 满血版强势登场,为大模型应用领域带来了全新的活力与变革。 本文不但介绍在线体验 DeepSeek R1/…

forge-1.21.x模组开发(二)给物品添加功能

功能效果 创建一个兑换券,当使用兑换券对着兑换机右键时,获得一条烤鱼 创建兑换券 创建ExchangeCouponsItem.java,继承Item,定义兑换券内容 public class ExchangeCouponsItem extends Item {public ExchangeCouponsItem(Prop…

NIO-Reactor模型梳理与demo实现

关于NIO,我们在上一篇 linux下网络编程socket&select&epoll的底层实现原理 就介绍了网络阻塞IO、以及基于事件驱动的非阻塞IO。对于NIO的API基本使用是java提供的接口,然后我们在业务上对NIO的使用,也是有不同的使用方法的。然后在我…

数据结构与算法-搜索-双向搜索 和 A*算法(字串变换,八数码,第k短路)

双向搜索: 双向搜索是一种优化的搜索策略,常用于在状态空间中寻找从起始点到目标点的路径或满足特定条件的状态 基本概念 双向搜索指的是从起始点和目标点同时出发进行搜索的方法。传统的单向搜索,如深度优先搜索(DFS&#xff09…

Java实现斗地主-做牌以及对牌排序

卡牌类 public class Card {private String size;//大小private String color;//花色private int value;//权值public Card() {}public Card(String size, String color, int value) {this.size size;this.color color;this.value value;}public String toString(){return …

Tesla T4 显卡 Linux 64-bit Ubuntu 24.04 驱动和cuda系统支持版本

搜索结果 | <dd~ProductName> | <dd~OSName> | NVIDIA 操作系统和硬件平台&#xff1a;页面展示的是适用于Linux 64位操作系统&#xff0c;版本为Ubuntu 24.04&#xff0c;并且专门为Tesla T4等NVIDIA数据中心GPU提供驱动程序。 驱动版本&#xff1a;页面列出了不…

申请SSL证书,如何完成域名验证

一、前言 给大家分享一下Lets Encrypt 证书申请时&#xff0c;如何完成域名验证这一步操作的方法。 二、为什么要进行域名验证 申请SSL证书时进行域名验证的主要原因是确保证书只颁发给有权控制特定域名的实体。这是为了保证互联网的安全性和信任&#xff0c;防止恶意方获取不…