linux业务代码性能优化点

planning优化的一些改动----------> 减少值传递,多用引用来传递 <----------
// ----------> 减少值传递,多用引用来传递 <----------
// 例1:
class A{};
std::vector<A> v;
// for(auto elem : v) {} // 不建议,内部会调用拷贝构造
for(const auto &elem : v) {} // 建议
// 例2:
class StGraphData
{
private:std::vector<STBoundary> mSTBoundaries;
public:// std::vector<STBoundary> st_boundaries() {reutrn mSTBoundaries;};  // 不建议,内部会调用拷贝构造const std::vector<STBoundary> &st_boundaries() {reutrn mSTBoundaries;};  // 建议
};----------> 空间换时间,如果有多次计算查找操作,可以预先转化为相应的表,然后直接find <----------
// ----------> 空间换时间,如果有多次计算查找操作,可以预先转化为相应的表,然后直接find <----------
// 例1:
// 查找s的相应速度
std::vector<std::pair<double, double>> vec; // 其中first为ST图中的纵轴相应的值s,second为相应的速度speed,全部为固定值
double s_1(已知index),s_2(已知index),s_3(已知index)......,s_n(已知index); // s_n属于first范围
{// 不建议,直接多次查找操作for (...){result_speed = std::lower_bound(vec.begin(), vec.end(), s_n, compare_s); }
}
{// 建议,先建立index-speed的表,直接根据index查找std::vector<double> speed_index;for (...){result_speed = speed_index.at(index_n);}
}----------> 利用static减少一些函数调用 <----------
// ----------> 利用static减少一些函数调用 <----------
// 例1:
// 如果确定获取的变量为常量
void func()
{// const double edge = Test::GetInstance()->GetConfig().edge();  // 不建议,会多次调用Test::GetInstance()static const double edge = Test::GetInstance()->GetConfig().edge(); // 建议
}
int main()
{for(...){func();}
}----------> vector预定容量,减少扩容 <----------
// ----------> vector预定容量,减少扩容 <----------
{// 不建议for (...){std::vector<int> v;for (...){v.emplace_back(i);}}
}
{// 建议for (...){std::vector<int> v;v.reserve(256); // 视情况而定容量for (...){v.emplace_back(i);}}}----------> 合理使用inline <----------
// 合理使用inline,当函数体内包含常量开销O(1)的简单语句,可以使用inline关键字修饰函数,减少函数调用出入栈操作
// Test.h
class Test
{
private:int value;
public:int getValue() const;
};
// Test.cpp
// int Test::getValue() const { return this->value;}; // 不建议
inline int Test::getValue() const { return this->value; }; // 建议----------> gcc/g++ 可以采用开启O2级别优化(CMakeList: -DCMAKE_BUILD_TYPE=RelWithDebInfo) <--------------------> 适当使用noexcept关键字 <----------
C++中的异常处理是在运行时而不是编译时检测的。为了实现运行时检测,编译器创建额外的代码,然而这会妨碍程序优化。
当编译器知道函数不会抛出异常时,它可以进行一些优化,提高代码的执行速度。这对于性能关键的应用程序特别有用。

----------> 列遍历跟行遍历的性能对比 <----------
// ----------> 列遍历跟行遍历的性能对比 <----------
cpu cache line 默认64B,可以看到性能差异近5倍!

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

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

相关文章

HiWoo Cloud物联网云平台

在科技日新月异的今天&#xff0c;物联网&#xff08;IoT&#xff09;已经成为推动社会进步的重要力量。而物联网云平台&#xff0c;作为连接万物、实现智能交互的核心&#xff0c;更是备受瞩目。今天&#xff0c;就让我们一起走进HiWoo Cloud的世界&#xff0c;探寻这款物联网…

学习axios拦截器

axios拦截器的作用&#xff1a;用于在请求发送前和响应返回后对请求和响应进行统一处理&#xff0c;例如添加公共请求头、处理请求参数、统一处理错误信息等。拦截器提供了一种灵活、高效的方式来管理HTTP请求和响应&#xff0c;帮助在前端开发中更好地处理数据交互。 这是一个…

揭秘业务系统数据安全三大核心问题:“谁在用”、“用什么”和“怎么用”

数据库宛如一座坚固的宝库&#xff0c;守护着无尽的智慧与财富—数据&#xff0c;如同熠熠生辉的金币。当宝库的门紧闭时&#xff0c;金币得以安然无恙。 然而&#xff0c;在业务系统的广阔天地中&#xff0c;这些数据金币被精心挑选、流通使用&#xff0c;每一枚都承载着无尽…

Master-Worker 架构的灰度发布难题

作者&#xff1a;石超 一、前言 Master-Worker 架构是成熟的分布式系统设计模式&#xff0c;具有集中控制、资源利用率高、容错简单等优点。我们数据中心内的几乎所有分布式系统都采用了这样的架构。 &#xfeff; 我们曾经发生过级联故障&#xff0c;造成了整个集群范围的服…

个人课设---玩家血条(包括攻击掉血,复活重生功能)

血条UI操作 渲染模式改为世界空间 导入面板组件并通过画布调整大小 在面板上导入文本组件&#xff0c;显示玩家名称&#xff08;旧版&#xff09; 为了使血条填满&#xff0c;Fill Area 数值全部置为0 改变背景颜色和填充物颜色&#xff0c;并设置血条方向 改变数值方便计算 …

7 - 产品销售分析 I(高频 SQL 50 题基础版)

7- 产品销售分析 I select product_name,year,price from Sales left join Product on Sales.product_id Product.product_id;

窗口重叠之鼠标事件透传

目的 Qt webview在下层展示url&#xff0c;上层覆盖最小化等按钮&#xff0c;支持大小拖拽&#xff0c;窗口移动。 如下图&#xff0c;除红框部分&#xff0c;其余异形部分作为url展示区 构想 想要实现该效果&#xff0c;需要在webview窗口上方动态创建两个窗口&#xff0c;…

四川古力未来科技抖音小店创新经营,引领电商新潮流

在数字化浪潮的推动下&#xff0c;电商行业蓬勃发展&#xff0c;抖音小店作为新兴的电商平台&#xff0c;正以其独特的魅力和优势吸引着越来越多的消费者。四川古力未来科技&#xff0c;作为抖音小店的经营者之一&#xff0c;凭借其可靠的经营模式和创新的经营理念&#xff0c;…

医用腕带朔源用的条形码与二维码如何选择

在医疗环境中的医用腕带作为患者身份识别和管理的重要工具&#xff0c;做为条形码和二维码腕带上的溯源技术&#xff0c;更是为患者信息快速获取、准确传递的保障&#xff0c;实现更加高效和准确的患者身份识别和管理&#xff0c;这种技术可以大大提高医疗服务的效率和质量&…

React路由(React笔记之五)

本文是结合实践中和学习技术文章总结出来的笔记(个人使用),如有雷同纯属正常((✿◠‿◠)) 喜欢的话点个赞,谢谢! React路由介绍 现在前端的项目一般都是SPA单页面应用,不再是以前多个页面多套HTML代码项目了,应用内的跳转不需要刷新页面就能完成页面跳转靠的就是路由系统 R…

小米路由器如何设置去广告功能,如何设置小米路由器的自定义Hosts(小米路由器如何去除小米广告、去除小米电视盒子开屏广告、视频广告)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 实现方案 📒📝 操作步骤📝 注意事项⚓️ 相关链接 ⚓️📖 介绍 📖 小米设备的广告一直是用户头疼的问题,无论是开屏广告、应用内广告还是系统广告,都影响了用户体验。本文将详细介绍如何通过小米路由器实现去除广告…

阿里云 查询封禁原因并申请解封 违规网站屏蔽访问违规URL整改通知 抱歉!该站点已经被管理员停止运行,请联系管理员了解详情!

原因网站被挂马或入侵 特别是织梦项目&#xff0c;已经100%难以使用。必然会被入侵。 要完全消除漏洞或防止被挂马&#xff0c;目前要么买安全服务&#xff0c;还没有别的好办法。 备份 恢复 项目做完后&#xff0c;先备份一个。被挂马能直接恢复。 每次修改后把权限全改为…

使用Nginx正向代理让内网主机通过外网主机访问互联网

目录 环境概述 流程说明 在外网服务器上安装部署nginx 安装前准备 下载nginx 编译安装nginx 开始配置正向代理 创建systemd服务单元文件&#xff0c;用于管理Nginx服务的启动、停止和重新加载 启动nginx 代理服务器本地验证 内网服务器验证 将代理地址添加到环境变量中…

比瓴科技以何魅力吸引安全大牛?

今年4月&#xff0c;专注于软件供应链安全的行业领导厂商比瓴科技宣布&#xff0c;与元豚科技战略合并&#xff0c;元豚科技创始人唐誉聪加入比瓴&#xff0c;担任合伙人及研发副总裁一职。唐誉聪表示&#xff0c;将携手比瓴共同推动持续应用安全平台(ASPM)的发展&#xff0c;将…

linux查看磁盘类型命令

在Linux中&#xff0c;有多种方法可以查看磁盘是固态硬盘&#xff08;SSD&#xff09;还是机械硬盘&#xff08;HDD&#xff09;。以下是一些常用的方法&#xff1a; 查看/sys/block/目录 /sys/block/目录包含了系统中所有块设备的信息。你可以查看这个目录中的设备属性来判断…

Tomcat概述及部署

目录 一、Tomcat概述 1.Tomcat的简介 2.Tomcat 核心的三个组件 3.应用场景 4.Tomcat 请求过程 二、部署安装Tomcat 三、Tomcat 虚拟主机配置 四、Tomcat多实例部署 一、Tomcat概述 1.Tomcat的简介 Tomcat 是 Java 语言开发的&#xff0c;Tomcat 服务器是一个免费的开…

eNSP学习——RIP路由协议基础配置

目录 主要命令 原理概述 实验内容 实验目的 实验拓扑 实验编址 实验步骤 1、基本配置 2、使用RIPv1搭建网络 开启 RIP调试功能 3、使用RIPv2搭建网络 RIPv1和RIPv2的不同 需要eNSP各种配置命令的点击链接自取&#xff1a;华为&#xff45;NSP各种设备配置命令大全PD…

yolov5的口罩识别系统+GUI界面 (附代码)

基于YOLOv5模型的口罩识别系统&#xff0c;结合了GUI界面&#xff0c;旨在帮助用户快速、准确地识别图像或视频中佩戴口罩的情况。YOLOv5是一种流行的目标检测模型&#xff0c;具有高效的实时检测能力&#xff0c;而GUI界面则提供了友好的用户交互界面&#xff0c;使得整个系统…

在VSCode中安装python

引言 Python 是一种广泛使用的高级编程语言&#xff0c;因其易学、易用、强大而受到欢迎。它由 Guido van Rossum 于 1991 年首次发布&#xff0c;并以简洁的语法和丰富的库生态系统而著称。 以下是 Python 的一些关键特点和优势&#xff1a; 关键特点 易于学习和使用&#x…