fun2比fun1稍快点

运行环境:WinXP VS2005(VC8)

核心代码:

#include <iostream>

using namespace std ;

#include <time.h>



#define WAN (10000)

const int iNum = WAN*WAN*3;

void fun1(int* p)

{

    for( int i = 0 ; i < iNum ; i++ )

    {

        p[i] = i;

    }

}



void fun2(int* p)

{

    for( int i = 0 ; i < iNum ; i+= 4  )

    {

        p[i] = i;

        p[i+1] = i+1;

        p[i+2] = i+2;

        p[3+3] = i+3 ;

    }

}



测试程序一:

void main()

{

    int * p = new int[iNum];

    int x1 = time(NULL);

    fun1(p);

    int x2 = time(NULL);

    fun2(p);

    int x3 = time(NULL);

    cout << (long)(x2-x1) << "秒 " << (long)(x3-x2) << "秒";

    delete [] p ;

}

五次的运行结果:

4,3

5,2

4,3

5,2

4,3



测试程序二fun2在前,fun1在后:

void main()

{

    int * p = new int[iNum];

    int x1 = time(NULL);

    fun2(p);

    int x2 = time(NULL);

    fun1(p);

    int x3 = time(NULL);

    cout << (long)(x2-x1) << "秒 " << (long)(x3-x2) << "秒";

    delete [] p ;

}

五次的运行结果:

3,4

3,5

3,4

2,5

3,4

总结3亿次循环,可以节约1秒左右。

p[3+3] = i+3 ; 弄错了,改正。 时间精确到毫秒。

#include <iostream>
using namespace std ;
#include <time.h>

#define WAN (10000)
const int iNum = WAN*WAN*3;
void fun1(int* p)
{
    for( int i = 0 ; i < iNum ; i++ )
    {
        p[i] = i;
    }
}

void fun2(int* p)
{
    for( int i = 0 ; i < iNum ; i+= 4  )
    {
        p[i] = i;
        p[i+1] = i+1;
        p[i+2] = i+2;
        p[i+3] = i+3 ;
    }
}

void Test()
{
    int * p = new int[iNum];
    long x1 = clock();
    fun1(p);
    long x2 = clock();
    fun2(p);
    long x3 = clock();
    cout << (x2-x1) << "豪秒 " << (x3-x2) << "豪秒" << endl;
    delete [] p ;
}

void main()
{
   Test();
   Test();
   Test();
   Test();
   Test();
}

结果为:

4734豪秒 3547豪秒
5078豪秒 3047豪秒
4453豪秒 3047豪秒
4468豪秒 2954豪秒
4531豪秒 3063豪秒

换一下Test中fun1,fun2的位置:

void Test()

{

    int * p = new int[iNum];

    long x1 = clock();

    fun2(p);

    long x2 = clock();

    fun1(p);

    long x3 = clock();

    cout << (x2-x1) << "豪秒 " << (x3-x2) << "豪秒" << endl;

    delete [] p ;

}

结果为:

3016豪秒 4313豪秒
2938豪秒 4344豪秒
2953豪秒 4515豪秒
2875豪秒 4343豪秒
2875豪秒 4329豪秒

结论:也是快1.5秒。

fun2比fun1稍快点的更多相关文章

  1. 一步步学习javascript基础篇(8):细说事件

    终于学到事件了,不知道为何听到“事件”就有一种莫名的兴奋.可能是之前的那些知识点过于枯燥无味吧,说起事件感觉顿时高大上了.今天我们就来好好分析下这个高大上的东西. 可以说,如果没有事件我们的页面就只能 ...

  2. Python学习Day2笔记(字符编码和函数)

    1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一 ...

  3. C++基础知识面试精选100题系列(11-20题)[C++ basics]

    [原文链接] http://www.cnblogs.com/hellogiser/p/100-interview-questions-of-cplusplus-basics-11-20.html [题 ...

  4. 浅谈spring 声明式事物

    此处主要讲讲事物的属性. 事物属性包含了五个方面: 1.传播行为 2.隔离规则 3.回滚规则 4.事物超时 5.是否只读 一.传播行为 事务的第一个方面是传播行为(propagation behavi ...

  5. jQuery中多个元素的Hover事件

    1.需求简介 jQuery的hover事件只是针对单个HTML元素,例如: $('#login').hover(fun2, fun2); 当鼠标进入#login元素时调用fun1函数,离开时则调用fu ...

  6. linux下实现在程序运行时的函数替换(热补丁)

    声明:以下的代码成果,是参考了网上的injso技术,在本文的最后会给出地址,同时非常感谢injso技术原作者的分享. 但是injso文章中的代码存在一些问题,所以后面出现的代码是经过作者修改和检测的. ...

  7. python返回值与局部全局变量

    Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright&q ...

  8. C++中为什么要将析构函数定义成虚函数

    构造函数不可以是虚函数的,这个很显然,毕竟虚函数都对应一个虚函数表,虚函数表是存在对象内存空间的,如果构造函数是虚的,就需要一个虚函数表来调用,但是类还没实例化没有内存空间就没有虚函数表,这根本就是个 ...

  9. javascript进阶系列专题:作用域与作用域链

    字面意思,作用域是指变量和函数的作用范围,换言之,作用域决定了变量和函数的可见性和有效时间.javascript作用域是用函数来区分,与其他语言的大括号不同. for (var i=0; i<5 ...

  10. Java-instanceof关键字

    一.instanceof 在编写代码过程中,如果不知道一个对象属于哪一个类,这时instanceof关键字起到决定性作用,他会以boolean(true\false)反馈结果 class A{ pub ...

随机推荐

  1. AI-Compass(AI百科全书开源):构建最全面的AI学习与实践生态,服务AI全群体

    AI-Compass(AI百科全书开源):构建最全面的AI学习与实践生态,服务AI全群体 AI-Compass将为你和社区提供在AI技术海洋中航行的方向与指引.无论你是刚踏入AI领域的初学者,还是寻求 ...

  2. 【自动配置魔法】Spring Boot Starter设计哲学剖析 + 实战自定义Starter全指南

    Spring Boot Starter 的设计原理 Spring Boot Starter 的核心设计目标是简化依赖管理和自动配置,通过约定优于配置的原则,减少开发者的手动配置工作.其设计原理主要包含 ...

  3. Win11系统任务栏图标怎么隐藏的问题

    不少电脑基地的小伙伴,在使用win11系统觉得任务栏中有的图标没什么用,就想要隐藏但却不知道要如何操作,那么碰到这种问题要怎么办呢?下面技术员小编就来分享具体的设置方法,大家一起来看看详细方法吧. 在 ...

  4. Hibernate Type源码解析

    type 的类图 AssociationType: 关联类型的 type,主要用于外键等相关 IdentifierType: 主键相关的类型 type BasicType: 基础类型,例如 long, ...

  5. CentOS 7部署Kerberos的实战详解

    以下是CentOS 7部署Kerberos的实战详解,整合了多篇权威指南的核心步骤与关键配置要点: ​​一.环境准备​​ ​​系统要求​​ CentOS 7及以上版本,至少2GB内存. ​​时钟同步​ ...

  6. VMware使用过程中出现了虚拟机繁忙问题

    记录下这个问题,这个问题的原因是VMware15以下版本和win10系统不兼容,将VMware版本升级到15.1以上即可解决问题.

  7. 5、rt-thread学习-env下menuconfig配置项目

    1.项目配置工具,menuconfig,menuconfig是一个简单易用的图形化配置工具,用来对内核和组件功能进行配置和裁剪,使得系统像搭积木的方式进行构建,自动生成rtconfig.h. 2.我们 ...

  8. SpringBoot系列之异步任务@Async使用教程

    @ 目录 实验环境准备 github用户信息类 异步任务配置类 查询github用户信息业务类 启动测试类实现 自定义异步任务异常 例子翻译自国外的两篇博客: https://www.baeldung ...

  9. 西门子 Smart ECX 与 MyEMS:智慧能碳管理平台的技术路径与生态差异深度解析

    在全球碳中和战略加速推进的背景下,企业对能源与碳管理数字化工具的需求日益迫切.西门子 Smart ECX 智慧能碳管理平台与 MyEMS 开源能源管理平台作为行业内的代表性解决方案,分别代表了商业闭源 ...

  10. MyEMS开源能源管理系统核心代码解读019

    MyEMS开源能源管理系统适用于建筑.工厂.商场.医院.园区的电.水.气等能源数据采集.分析.报表,还有光伏.储能.充电桩.微电网.设备控制.故障诊断.工单管理.人工智能优化等可选功能.资深专业团队开 ...