近期在写的一个项目须要优化处理速度,我写了一下程序来測试指针赋值与指针推断的速度比較。结果让我大吃一惊。

#include <stdio.h>
#include <stdlib.h>
#include <time.h> int main(int argc, char *argv[]) {
int j;
int * tmp;
clock_t start = clock();
int i=0;
tmp=malloc(sizeof(int *));
for(;i<100000000;i++){
tmp[0]=2324;
tmp[1]=32423;
tmp[2]=90123;
tmp[3]=23421;
}
clock_t end = clock();
printf("程序执行时间为: %ld ms \n",end - start);
start = clock();
i=0;
for(;i<100000000;i++){
if(tmp[0]==2356){
j=9089;
}
if(tmp[1]==234){
j=7812;
}
if(tmp[2]==2342){
j=2345;
}
if(tmp[3]==23423){
j=12032;
}
}
end = clock();
printf("程序执行时间为: %ld ms",end - start);
return 0;
}

结果例如以下:

程序执行时间为: 296 ms
程序执行时间为: 344 ms

我又执行了数次,结果都是前一段程序比后一段程序块40~50ms左右。

推測可能是由于我在for循环中一直赋相同的值。编译器做了相关优化。但是假设那样的,不可能仅仅快40~50ms。

第一小部分的程序主体是:

 for(;i<100000000;i++){
tmp[0]=2324;
tmp[1]=32423;
tmp[2]=90123;
tmp[3]=23421;
}

第一小部分的程序主体是:

    for(;i<100000000;i++){
if(tmp[0]==2356){
j=9089;
}
if(tmp[1]==234){
j=7812;
}
if(tmp[2]==2342){
j=2345;
}
if(tmp[3]==23423){
j=12032;
}
}

測试环境是 :Dev C++

相同的。每次都訪问了指针指向的地址。结果赋值居然比推断快。

C语言速度优化之指针赋值与if推断的更多相关文章

  1. (四)C语言柔性数组、指针赋值

    一.柔性数组 今天看了公司的代码,发现一个很奇怪的问题,后来自己写了类似代码,我先把代码贴出来吧. #include<stdio.h> #include<string.h> # ...

  2. c语言常量指针赋值给变量指针导致警告

    常量指针定义:常量是形容词,指针是名词,以指针为中心的一个偏正结构短语.这样看,常量指针本质是指针,常量修饰它,表示这个指针乃是一个指向常量的指针.指针指向的对象是常量,那么这个对象不能被更改.常量指 ...

  3. 计算机二级-C语言-程序设计题-190111记录-两种指针赋值的不同,普通输入输出函数和文件输入输出函数的使用

    //程序设计题:函数fun的功能是:将两位数的正整数a,b合并形成一个整数放在c中.合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上.例如:当 ...

  4. C语言精要总结-指针系列(一)

    考虑到指针内容繁多,这里将指针作为一个系列,从简入繁,一点一点深挖并掌握这C语言的精华.初步计划如下 此文为指针系列第一篇: C语言精要总结-指针系列(一) 内存与地址 我们可以把内存看做一排连续的房 ...

  5. 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析

    . Android源码看的鸭梨大啊, 补一下C语言基础 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/detai ...

  6. C语言 内存分配 地址 指针 数组 参数 实例解析

    . Android源码看的鸭梨大啊, 补一下C语言基础 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/detai ...

  7. Go语言性能优化

    原文:http://bravenewgeek.com/so-you-wanna-go-fast/ 我曾经和很多聪明的人一起工作.我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能) ...

  8. web访问速度优化分析

    请求从发出到接收完成一共经历了DNS Lookup.Connecting.Blocking.Sending.Waiting和Receiving六个阶段,时间共计38ms.请求完成之后是DOM加载和页面 ...

  9. 【转载】C/C++语言void及void指针深层探索

    C/C++语言void及void指针深层探索 1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述vo ...

随机推荐

  1. HDU 5446 Unknown Treasure Lucas+中国剩余定理+按位乘

    HDU 5446 Unknown Treasure 题意:求C(n, m) %(p[1] * p[2] ··· p[k])     0< n,m < 1018 思路:这题基本上算是模版题了 ...

  2. 机器学习(三) Jupyter Notebook, numpy和matplotlib的详细使用 (下)

    七.Numpy中的矩阵运算 八.Numpy中的聚合运算 九.Numpy中的arg运算 十.Numpy中的比较和Fancy Indexing 十一.Matplotlib数据可视化基础 十二.数据加载和简 ...

  3. CSS3侧滑导航

    <!DOCTYPE> <html> <head> <meta charset="utf-8" /> <meta name=&q ...

  4. python 深浅拷贝小记

    浅拷贝:只拷贝第一层的数据 深拷贝:相当于克隆 一份,也就是完全复制,和被克隆对象完全没关系. 浅拷贝示例:先定义一个列表 >>> s = [1,'alex','alvin'] &g ...

  5. babel的插件

    比如想编译es6的箭头函数,需要使用babel-plugin-transform-es2015-arrow-functions这个插件 此外babel提供了 prests(预设) 相当于是插件的集合 ...

  6. 推荐《深入浅出深度学习原理剖析与python实践》PDF+代码

    <深入浅出深度学习原理剖析与Python实践>介绍了深度学习相关的原理与应用,全书共分为三大部分,第一部分主要回顾了深度学习的发展历史,以及Theano的使用:第二部分详细讲解了与深度学习 ...

  7. ZOJ 2532 Internship

    Internship Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original ID: ...

  8. 【HDOJ 5384】Danganronpa

    [HDOJ 5384]Danganronpa AC自己主动机. .. 当时感觉用字典树 标神也往自己主动机想来着..手太生加上时间紧迫也没敲--回来一看题解什么AB同一时候建自己主动机...顿时愣了 ...

  9. leetcode: Maximum Depth of Binary Tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  10. Apple iMac性能基准测试

    这里我要向大家介绍的一款苹果操作系统下的性能测试软件名叫GeekBench,是加拿大PrimateLabs公司出品. 下载地址:http://www.primatelabs.ca/geekbench/ ...