首页 > 编程语言 >C++ 性能优化 - for循环条件中不要调用函数

C++ 性能优化 - for循环条件中不要调用函数

时间:2023-04-10 17:45:27浏览次数:34  
标签:std count include average long C++ 调用函数 total 优化

  1. for循环条件中调用普通函数
#include <iostream>
#include <chrono>
using namespace std;

long long count = 0;
const int N = 10;
int getSize(){
    cout<<"get size"<<endl;
    return N + 1;
}

void timeMeasure(void(*f)()){
    auto begin = std::chrono::high_resolution_clock::now();
    uint32_t iterations = 1;
    for(uint32_t i = 0; i < iterations; ++i)
    {
        f();
    }
    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(end-begin).count();
    std::cout << duration << "ns total, average : " << duration / iterations << "ns." << std::endl;
}


void test1(){
    for(int i = 0; i < getSize(); ++i){
        count++;
    }
}

void test2(){
    for(int i = 0; i < N + 1; ++i){
        count++;
    }
}

int main(){
    timeMeasure(test1);
    cout<<count<<endl;
    timeMeasure(test2);
    cout<<count<<endl;
    return 0;
}

8642ns total, average : 86ns.
1000
6502ns total, average : 65ns.
2000
  1. 探究vector size()函数
#include <iostream>
#include <chrono>
#include <vector>
using namespace std;
long long count = 0;
const int N = 100;
vector<int> arr1;
vector<int> arr2;
void timeMeasure(void(*f)()){
    auto begin = std::chrono::high_resolution_clock::now();
    uint32_t iterations = 2;
    for(uint32_t i = 0; i < iterations; ++i)
    {
        f();
    }
    auto end = std::chrono::high_resolution_clock::now();
    auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(end-begin).count();
    std::cout << duration << "ns total, average : " << duration / iterations << "ns." << std::endl;
}


void test1(){
    for(int i = 0; i < arr1.size(); ++i){
        count++;
    }
}

void test2(){
    int num = arr2.size();
    for(int i = 0; i < num; ++i){
        count++;
    }
}

int main(){
    arr1.assign(N, 0);
    arr2.assign(N, 0);
    timeMeasure(test1);
    cout<<count<<endl;
    timeMeasure(test2);
    cout<<count<<endl;
    return 0;
}
3412ns total, average : 1706ns.
200
1675ns total, average : 837ns.
400

标签:std,count,include,average,long,C++,调用函数,total,优化
From: https://www.cnblogs.com/qiangz/p/17303673.html

相关文章

  • C/C++猜单词系统[2023-04-10]
    C/C++猜单词系统[2023-04-10]程序设计题二:猜单词面向专业:非计算机专业难度:41问题描述请从一片英文的短文中任意提取一个单词,给出该单词的字母数量,让游戏者猜单词的拼写字母,游戏者每次只能猜一个字母,如果游戏者猜的字母在单词中,单词中所有的该字母将被视为已猜出,例如:如果原单......
  • C/C++驾驶员理论课程模拟考试与学习系统[2023-04-10]
    C/C++驾驶员理论课程模拟考试与学习系统[2023-04-10]程序设计题:驾驶员理论课程模拟考试与学习系统出题人:金仙力面向专业:计算机科学与技术难度等级:41问题描述要求编写一个程序,模拟驾驶员科目一的考试,要求具有良好的操作界面。管理员负责试题库的管理(编辑、删除、增加等)......
  • C++,OpenCV鼠标操作(8)
    鼠标事件响应voidsetMouseCallback(constString&winname,MouseCallbackonMouse,void*userdata=0);/******************************************************************** winname: 监听窗口名称* onMouse: 鼠标事件回调函数* userdata: 递给回调函数的可......
  • 关于vue2老项目的打包优化,实现首屏加载速度提升
    分析项目代码体积yarnaddwebpack-bundle-analyzer在webpack.dev.conf.js中配置constBundleAnalyzerPlugin=require('webpack-bundle-analyzer').BundleAnalyzerPluginplugins:[newBundleAnalyzerPlugin(),//代码体积分析插件......]执行yarnrundev或......
  • c++ stdcall 方式与 C# 传递 struct 数据类型?
    usingnamespacestd;#include<iostream>#include<thread>#include<mutex>structMyStruct{char*myString;intlength;//othermembers};#ifdef__cplusplusextern"C"{#endif__declspec(dllexport)int_......
  • 《c++徒步》MFC篇——新建MFC项目
    VS2019安装MFC原文链接:https://blog.csdn.net/qq_36556893/article/details/899459431.打开vs安装程序2.选择VisualStudio扩展开发3.选择C++MFC生成工具(x86和x64)进行安装4.选择修改,等待安装VS2008新建MFC原文链接:https://www.likecs.com/show-454706.htmlVS2008......
  • c++中BOOL和bool的区别
    一:在网上找到了BOOL和bool的区别:1、类型不同BOOL为int型bool为布尔型2、长度不同bool只有一个字节BOOL长度视实际环境来定,一般可认为是4个字节3、取值不同bool取值false和true,是0和1的区别BOOL取值FALSE和TRUE,是0和非0的区别二:bool是标准C++数据类型,可取值true和false......
  • c++ 多线程摘记
    有没有linux和windows通用的多线程库?ChatGPT:是的,C++11标准引入了一个名为std::thread的多线程库,它可以在Windows和Linux上使用。std::thread库提供了一种方便的方式来创建和管理线程,包括启动、等待、终止和同步线程。此外,它还提供了一些便利的功能,例如线程局部存储......
  • C++派生类里析构函数和构造函数的调用顺序
    C++派生类里析构函数和构造函数的调用顺序1.定义一个哺乳类Mammal,在由此派生出狗类Dog,定义一个Dog类的对象,观察基类和派生类的构造函数与析构函数的调用顺序。#include<bits/stdc++.h>usingnamespacestd;classMammal{public: Mammal(){ cout<<"constructedM"<<e......
  • 《c++徒步》MFC篇——MFC基础知识
    MFC简介原文链接:https://www.cnblogs.com/zhouwanqiu/p/6914090.html1、什么是MFC?全称:MicrosoftFoundationClassLibrary(微软基础类库)1-MFC从硬盘存在形式来说就是一个库(静态MFC库、动态MFC库)2-MFC从原理来说还是一个程序框架2、为什么使用MFC?基于框架编程,提高工作效......