vector、heap数组、stack数组访问性能验证

测试目的

本次测试旨在比较不同数据结构(vector、数组)以及不同访问方法([]at()offset)在性能上的差异,从而为开发者提供在特定情境下做出最佳选择的依据。

测试代码

测试网址:Quick C++ Benchmarks

使用GCC9.5 C++14 -O2编译

#include <benchmark/benchmark.h>static void vector_access(benchmark::State& state) {std::vector<int> v;for (int i = 0; i < 1000; ++i) {v.push_back(i);}for (auto _ : state) {for (int i = 0; i < 1000; ++i) {v[i] += 1;}}
}
BENCHMARK(vector_access);static void vector_access_by_at(benchmark::State& state) {std::vector<int> v;for (int i = 0; i < 1000; ++i) {v.push_back(i);}for (auto _ : state) {for (int i = 0; i < 1000; ++i) {v.at(i) += 1;}}
}
BENCHMARK(vector_access_by_at);static void array_access(benchmark::State& state) {int a[1000];for (int i = 0; i < 1000; ++i) {a[i] = i;}for (auto _ : state) {for (int i = 0; i < 1000; ++i) {a[i] += 1;}}
}
BENCHMARK(array_access);static void array_access_by_offset(benchmark::State& state) {int a[1000];for (int i = 0; i < 1000; ++i) {a[i] = i;}for (auto _ : state) {for (int i = 0; i < 1000; ++i) {*(a + i) += 1;}}
}
BENCHMARK(array_access_by_offset);static void heap_access(benchmark::State& state) {int *a = new int[1000];for (int i = 0; i < 1000; ++i) {a[i] = i;}for (auto _ : state) {for (int i = 0; i < 1000; ++i) {a[i] += 1;}}delete[] a;
}
BENCHMARK(heap_access);static void heap_access_by_offset(benchmark::State& state) {int *a = new int[1000];for (int i = 0; i < 1000; ++i) {a[i] = i;}for (auto _ : state) {for (int i = 0; i < 1000; ++i) {*(a + i) += 1;}}delete[] a;
}
BENCHMARK(heap_access_by_offset);

运行结果

Quick C++ Benchmarks

结论

  • vector at()方法访问速度最慢

  • 栈上访问最快

  • 其它情况经过O2优化后性能类似。

指导意见

  • 追求最高效的访问速度:如果性能是首要考虑因素,建议使用栈上数组并采用[]访问方法。

  • 避免使用vectorat()方法:在对性能要求较高的场景下,应避免使用vectorat()方法,转而使用[]访问方法。

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

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

相关文章

微服务项目实战-黑马头条(十三):持续集成

文章目录 项目部署_持续集成1 今日内容介绍1.1 什么是持续集成1.2 持续集成的好处1.3 今日内容 2 软件开发模式2.1 软件开发生命周期2.2 软件开发瀑布模型2.3 软件的敏捷开发 3 Jenkins安装配置3.1 Jenkins介绍3.2 Jenkins环境搭建3.2.1 Jenkins安装配置3.2.2 Jenkins插件安装3…

中仕公考:非应届生能考军队文职吗?

军队文职考试的招生对象主要针对普通高等学校的毕业生以及社会人才&#xff0c;报考条件中并没有限制考生必须是应届毕业生。所以&#xff0c;往届毕业生也是具备报考资格的&#xff0c;只需其满足相关的申请条件即可。 报考人员可大致分为三类&#xff1a;普通高校毕业生、社…

Linux中云盘/磁盘,爆满处理方式

1&#xff1a;du和df命令查看磁盘大小不一致 以下是阿里云服务器云盘使用率 运行 du -sh / 大小为20g 我的服务器大小为40g 按道理说这个云盘使用率应该是百分之五十 而运行 df -h / 这个命令是跟这个云盘使用率差不多的。 1.1分析原因 我安装了mysql&#xff0c;nginx…

微信投票小程序源码系统 独家支持礼物投票 道具投票盈利能力超强 带完整的安装代码包以及搭建教程

微信小程序的快速发展&#xff0c;各类应用场景层出不穷&#xff0c;其中投票小程序因其广泛的适用性和互动性&#xff0c;成为了许多企业和个人推广、活动的首选工具。小编给大家分享一款微信投票小程序源码系统&#xff0c;该系统以其独特的礼物投票和道具投票功能&#xff0…

公众号流量主的收益怎么样?

公众号之前是一个私域平台&#xff0c;没有粉丝基本是没有推荐的&#xff0c;所以之前入门的门槛还是很高的&#xff0c;但是今年公众号和视频号改变了推流的机制&#xff0c;现在发的文章会进入到流量池中&#xff0c;进入到公域流量&#xff0c;所以发布的优质文章会大爆的&a…

UDS 诊断问题 1 禁止肯定响应位是?

https://zhidao.baidu.com/question/309042832640046964.html 禁止肯定响应位是什么 在车里CAN诊断中&#xff0c;如果哪个诊断子功能支持禁止肯定响应位&#xff0c;并且为1&#xff0c;如10 03 此时向该ECU发送请求10 83&#xff0c;那么ECU不会回复任何报文&#xff0c;也就…

大模型驱动的新一代 BI 平台,Sugar BI 开启智慧决策新模式

本文整理自 2024 年 4 月 16 日的 2024 百度 Create 大会上的《大模型驱动的新一代 BI 平台如何开启智慧决策》分享。 全文包括了可视化 BI 分析技术架构、智能图表推荐策略与规则设计、Sugar Bot 智能问数的技术实现流程&#xff0c;以及目前的场景应用等。 1 Sugar BI 产…

C#语言基础

一、复杂数据类型 1. 枚举 1.1 基本概念 1.1.1 枚举是什么 枚举是一个被命名的整型常量的集合&#xff0c;一般用它来表示状态、类型等等 1.1.2 申明枚举和申明枚举变量 申明枚举和申明枚举变量是两个概念 申明枚举&#xff1a;相当于是创建一个自定义的枚举类型 申明枚…

python爬虫(二) 之 42号网汽车文章爬虫

python爬虫&#xff08;二&#xff09; 之 42号网汽车文章爬虫 今天在咸鱼上有个买家找我一个42号网汽车文章的爬虫&#xff0c;目前需求已经做完了&#xff0c;现在将这部分代码开源&#xff0c;供大家参考。爬虫能够抓取到网站上所有文章的数据&#xff0c;大概一小时左右就…

一款功能强大的网络安全综合工具-PotatoTool

一、 简介 这款工具是一款功能强大的网络安全综合工具&#xff0c;旨在为安全从业者、红蓝对抗人员和网络安全爱好者提供全面的网络安全解决方案。它集成了多种实用功能&#xff0c;包括解密、分析、扫描、溯源等&#xff0c;为用户提供了便捷的操作界面和丰富的功能选择。 二…

「YashanDB迁移体验官」Oracle向YashanDB迁移的丝滑体验

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

动手学深度学习——李沐(学习笔记)未完待续........

1.一直想明白的Linear什么意思 先定义一个模型变量net&#xff0c;它是sequential的一个实例&#xff0c;senquential类将多个单层串联在一起&#xff0c;给定输入数据的时候sequential输入数据&#xff0c;传入第二层以此类推。 全连接层就是包括完整的输入输出。全连接层在…

一起深度学习

CIFAR-10 卷积神经网络 下载数据集构建网络运行测试 下载数据集 batchsz 32cifar_train datasets.CIFAR10(data,trainTrue,transformtorchvision.transforms.Compose([torchvision.transforms.Resize((32,32)),torchvision.transforms.ToTensor()]),downloadTrue)cifar_train …

2024年华为OD机试真题-小明找位置-(C++)-OD统一考试(C卷D卷)

题目描述: 小朋友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。 算法复杂度要求不高于nLog(n);学号为整数类型,队列规模<=10000; 输入描述: 1、第一行:输入已排成队列的小朋友的学号(正整数),以”,”隔开; …

个人消息22222222222222

项目名称: 建融家园住房租赁服务平台 项目介绍: 该系统主要包括2个部分前台和后台。前台负责展示和搜索房屋租赁信息。后台负责个人权限的管理、个人信息的管理和房源消息的管理发布。 系统架构&#xff1a;前台页面通过Http请求访问到zuul网关&#xff0c;网关通过底层的 Spri…

数据结构-线性表-应用题-2.2-6

从有序顺序表中删除所有其值重复的元素&#xff0c;使表中的元素的值均不同 有序顺序表&#xff0c;值相同的元素一定在连续的位置上&#xff0c;初始时将第一个元素是为非重复的有序表&#xff0c;之后依次判断后面的元素是否与前面的非重复表的最后一个元素相同&#xff0c;…

【Golang】使用Golang进行接口(Interface)编程

文章目录 前言一、Interface 接口解释二、代码实现三、总结 前言 在编程中&#xff0c;接口是一种强大的工具&#xff0c;它为我们提供了一种方式来定义和组织复杂的系统&#xff0c;而不需要知道系统的具体实现。在 Go 语言中&#xff0c;接口的概念被用得尤为广泛。本文将介…

【北京迅为】《iTOP-3588开发板快速烧写手册》-第3章 烧录完整升级固件update.img

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

STM32控制DS1302时钟模块获取实时时间

欢迎入群共同学习交流 时间记录&#xff1a;2024/4/30 一、知识点 &#xff08;1&#xff09;读写数据时序&#xff08;伪SPI协议&#xff09; 1.1 读写时序默认电平均为SCLK线低电平&#xff0c;CE线低电平 1.2 写数据&#xff0c;CE线拉高为高电平&#xff0c;开始传输数据…

在线教育系统怎么样的呢,音乐培训班学习音乐基本要求有哪些?

现在高考已经不仅仅是学科类就可以&#xff0c;还可以艺术类进行报考&#xff0c;音乐就是艺术类的一种&#xff0c;很多人学音乐都是为了报考更好的院校&#xff0c;音乐机构也越来越多&#xff0c;那培训班学习音乐基本要求有哪些&#xff1f; 一、基础乐理 音乐理论也称乐理…