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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年- G17-Lc91-409.最长回文-java版

1.题目描述 2.思路 思路1: 判断一个字符串中的字母个数是否是偶数个。 遍历字符串,检查每个字符是否是字母(可以通过 Character.isLetter() 来判断)。 累加字母的个数。 最后判断字母的个数是否是偶数。 思路2: 这段 Java 代码的作用是 统…

本地安装 Grafana Loki

本地安装 Grafana Loki 一、 安装 Loki1. 下载 Loki2. 创建 Loki 配置文件3. 创建 Loki 服务 二、安装 Promtail1. 下载 Promtail2. 创建 Promtail 配置文件3. 创建 Promtail 服务 三、 安装 Grafana四、启动所有服务五、添加loki 数据源1. 添加仪表板2. 日志查询面板 json 参考…

创建虚拟环境以及配置对应的项目依赖

文章目录 首先创建一个虚拟环境,创建一个名字为myenv,并且版本为xxx的虚拟环境 conda create --name myenv pythonxxx激活虚拟环境 conda activate myenv下载所需的依赖,如果有requirements.txt文件 pip install -r requirements.txt容易出现的错误&a…

W803|联盛德|WM IoT SDK2.X测试|(1)开箱:开发板及说明

前几天关注的联盛德微电子新推出了WM IoT SDK2.X,正式发布后,邀请用户参加“免费试用,赢千元大礼”活动,填写信息,等待统一发送,很快收到了板子。 活动地址:联盛德微电子WM IoT SDK2.X正式发布…

SSI用量子计算来玩AI

刚到家,早上说今天回来要写SSI为什么这么牛B,那就必须得写 SSI是什么公司? Safe Super Intelligence 就是中间这个秃子的公司 ilya 前openAI 首席科学家(现在的mark chen确实有点水) Daniel Gross、Ilya Sutskever、Daniel Levy&#xff…

【分布式数据一致性算法】Gossip协议详解

在分布式系统中,多个节点同时提供服务时,数据一致性是核心挑战。在多个节点中,若其中一个节点的数据发生了修改,其他节点的数据都要进行同步。 一种比较简单粗暴的方法就是 集中式发散消息,简单来说就是一个主节点同时…

文档检索服务平台

文档检索服务平台是基于Elasticsearch的全文检索,包含数据采集、数据清洗、数据转换、数据检索等模块。 项目地址:Github、国内Gitee 演示地址:http://silianpan.cn/gdss/ 以下是演示角色和账号(密码同账号)&#xf…

【YOLOv8】YOLOv8改进系列(2)----替换主干网络之FasterNet(CVPR 2023)

主页:HABUO🍁主页:HABUO 🍁YOLOv8入门改进专栏🍁 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 【YOLOv8改进系列】: 【YOLOv8】YOLOv8结构解读…

Linux信号

目录 1. 信号的概念搞定(输出结论,支撑我们的理解) 补充知识 2.信号的产生 补充知识 3.信号的保存 4.阻塞信号 1. 信号其他相关常见概念 2. 在内核中的表示 3. sigset_t 4. 信号集操作函数 sigprocmask sigpending 5. 信号的…

NI Multisim仿真实现39计数器

功能需求 39进制计数器。 功能分析 (1)时钟信号产生电路:用555定时器产生时钟脉冲 2)计数器: 用两片74160先串接起来构成一个百进制计数器;再用置数法接成39进制计数器。(可用开关控制计数器…

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

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

Android Binder机制

Binder是IPC(进程间通信)的一种机制,它允许不同的应用或系统服务在不同的进程中安全地交换数据。Binder的核心原理是基于客户端-服务器模型(C/S架构)。 一、Binder的定义 1. Binder是Android中的一个类,它继承了IBind…

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

医疗AI领域中GPU集群训练的关键技术与实践经验探究(上) 一、引言 1.1 研究背景与意义 在科技飞速发展的当下,医疗 AI 作为人工智能技术与医疗领域深度融合的产物,正引领着医疗行业的深刻变革。近年来,医疗 AI 在疾病诊断、药物研发、健康管理等诸多方面取得了显著进展,…

MariaDB 历史版本下载地址 —— 筑梦之路

MariaDB 官方yum源里面只有目前在维护的版本,而有时候对于老项目来说还是需要老版本的rpm包,国内很多镜像站都是同步的官方仓库,因此下载老版本也不好找,这里主要记录下从哪里可以下载到历史版本的MariaDB rpm包。 1. 官方归档网…

特辣的海藻!2

基础知识点 整型数字-->字符数字 方法一:使用Character.forDigit()方法 Character.forDigit(int num, int radix) 该方法可以将整型数字转换为对应的字符形式。radix表示进制 Tips: ● 需要转换的整型数字必须在 0 到 radix-1 的范围内,…

RoCEv2 高性能传输协议与 Lossless 无损网络

目录 文章目录 目录RoCERoCEv2 协议栈RoCEv2 需要 Lossless NetworkLossless Network 拥塞控制技术网络拥塞的原因PFC 基于优先级的流量控制PFC Deadlock(死锁)的问题PFC Storm(风暴)的问题ECN 显式拥塞通知拥塞控制ECN 拥塞控制滞…

win10把c盘docker虚拟硬盘映射迁移到别的磁盘

c盘空间本身就比较小、如果安装了docker服务后,安装的时候没选择其他硬盘,虚拟磁盘也在c盘会占用很大的空间,像我的就三十多个G,把它迁移到其他磁盘一下子节约几十G 1、先输入下面命令查看 docker 状态 wsl -l -v 2、如果没有停止…

论文笔记:Autonomy-of-Experts Model

202501 arxiv 1 intro MoE中常被忽视的一个关键问题是路由器的决策过程与专家执行之间的分离 路由器无法直接评估专家的能力,因此它对专家的选择基本上是没有标签的预测如果路由器做出了错误的预测,选择的专家可能会试图处理这些令牌,但未能…

deepseek 清华大学[1-5版]全集

1、文件概览 1、清华大学《DeepSeek:从入门到精通》 2、清华大学《Deepseek如何赋能职场应用?》 3、清华大学《普通人如何抓住DeepSeek红利》 4、清华大学《DeepSeekDeepResearch让科研像聊天一样简单》 5、清华大学《DeepSeek与AI幻觉》 6、天津大学《深度解读Deepseek:原理…

【Git 学习笔记_27】DIY 实战篇:利用 DeepSeek 实现 GitHub 的 GPG 秘钥创建与配置

文章目录 1 前言2 准备工作3 具体配置过程3.1. 本地生成 GPG 密钥3.2. 导出 GPG 密钥3.3. 将密钥配置到 Git 中3.4. 测试提交 4 问题排查记录5 小结与复盘 1 前言 昨天在更新我的第二个 Vim 专栏《Mastering Vim (2nd Ed.)》时遇到一个经典的 Git 操作问题:如何在 …