数组下标赋值和指针赋值效率探索

2023-05-16

使用数组下标赋值和指针赋值效率探索

int main(int argc, char **argv)
{
    int arr[100]; 
    int *p;
    struct timespec beg, end;

    clock_gettime(CLOCK_REALTIME, &beg);

    //使用下标赋值
    /* for(int i = 0; i < 100; i++){ */
    /*     arr[i] = 0; */
    /* } */

    //使用指针赋值
    for(p = arr; p < arr; p++){
        *p = 0;
    }
    
    clock_gettime(CLOCK_REALTIME, &end);

    printf("cost time = %ld\n", end.tv_nsec - beg.tv_nsec);

    return 0;
}

上面的代码是两种非常常用的数组循环赋值的写法,貌似使用下标赋值的方式可能更容易理解,更加常见。但是这两种写法真的就一样么?

  1. 但从功能上来说的确是一摸一样,但是从效率上来看,效率一样么?经过实际测试发现,指针的方式效率要更高,而且高很多!

    1. 使用下标的运行时间(纳秒)
      在这里插入图片描述

    2. 使用指针的运行时间(纳秒)
      在这里插入图片描述

  2. 为什么指针的方式效率会更高呢?

    1. 对于采用下标的时候:为了对下标表达式求值,编译器在程序中插入指令,获取到i值,并且把它与整型的长度(4)相乘,因为i值不是固定的所以,每次一for循环都需要做乘法,需要花费一定的时间和空间。
    2. 采用指针的方式的时候:这里的for循环也需要乘法,即1乘整型的长度(1*4),然后再与指针相加。这与下标的乘不同,执行乘法运算的时候,每次都是两个相同的数(1和4)。结果这个乘法只在编译的时候执行一次,所以现在执行指针偏移的时候就只包含了一条指令,即4与指针相加。程序在运行时并不执行乘法运算。(参考书籍《c和指针》)
  3. 指针并不一定比数组更有效率,有时指针运用的比较差(代码编写比较差),可能会导致使用指针的方式比直接使用简洁易懂的下标效率更低。

  4. 实际编程中代码的效率并不是唯一所追求的,有时代码写的简洁、通俗易懂更为重要

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组下标赋值和指针赋值效率探索 的相关文章

  • React useReducer 终极使用教程

    React useReducer 终极使用教程 useReducer 工作原理关于 reducer 函数 懒惰创建初始 statedispatch 函数不触发dispatch useState 和 useReducer 比较和区别及应用场景
  • 简单的数据可视化---绘制散点图

    使用scatter绘制散点图并设置其样式 绘制单个点 要绘制单个点 xff0c 可以使用函数scatter xff0c 并向它传递一对x和y坐标 xff0c 它将在指定位置绘制一个点 xff1a span class token keywo
  • python随机漫步

    随机漫步 这次我们将使用python生成随机漫步数据 xff0c 然后用matplotlib的方式将这些数据呈现出来 随机漫步每次行走都完全是随机的 xff0c 没有明确的方向 xff0c 结果是由一系列随机决策决定的 你可以这样认为 xf
  • python基础

    python基础 文章目录 python基础基础语法关键字标识符多行语句数据类型 字符串输出import 与from import基本数据类型多个变量赋值标准数据类型Number xff08 数字 xff09 数值运算数学函数随机数函数三角
  • Debian简介与Debian源

    1 Deiban是一套自由操作系统 使用Linux内核 xff0c 大部分基本工具来自GNU计划 因此称Deiban为Debian GNU Linux Debian是第一个使用包管理系统的Linux发行版 xff0c 是的安装和删除软件变得
  • cloudmusic:网易云爬虫

    文章目录 cloudmuscic xff1a 网易云音乐爬虫安装使用music对象1 music对象属性2 music对象方法3 music对象函数 user对象1 user对象属性2 user对象方法3 获取user对象函数 cloudm
  • 链家深圳二手房房价数据分析

    文章目录 链家深圳二手房房价数据分析1 链家数据爬取源码2 雷达图的绘制2 1 源码2 2 雷达图效果图 3 饼状图的绘制3 1 源代码3 2 饼状图效果图 4 多维散点图4 1 源码4 2 多维散点图效果图 5 玫瑰图5 1 源码5 2
  • UNIX基础知识

    文章目录 UNIX基础知识1 1 引言1 2 UNIX体系结构1 3 登录1 4 文件和目录1 5 输入和输出1 6 程序和进程1 程序2 进程和进程ID3 进程控制4 线程和线程ID 1 7 出错处理出错恢复 1 8 用户标识1 用户ID
  • 栈和队列——小猫钓鱼

    星期天A和B在一起玩扑克牌 xff0c 他们在玩一个古怪的扑克牌游戏 小猫钓鱼 游戏的规则是这样的 xff0c 将一副扑克牌平均分成两份 xff0c 每人拿一份 A先拿出手中的第一章牌放在桌上 xff0c 然后B也从手里拿出一张牌放在桌上
  • 二叉树与二叉树遍历

    树的介绍 你可能回文树和图有什么区别 xff1f 这个称之为树的东西和无向图差不多嘛 树其实就是不包含回路的连通无向图 图画的不好啊 xff0c 把箭头忽略一下将就看一下 xff0c 上面这个图左边就是一棵树 xff0c 而右边就是一个图
  • 广度优先搜索

    在前面的迷宫中 xff0c 我们使用了深度优先搜索的方法 xff0c 这里介绍一个新的方法来解决这个问题 广度优先搜索 xff0c 也称为宽度优先搜索 这里还是用一个二维数组来存储迷宫 xff0c 最开始的时候A也是在迷宫 0 0 处 xf
  • 图的遍历--深度优先搜索

    深度优先搜索和广度优先搜索 xff0c 其实都是针对图的变量而言的 简单来说 xff0c 图就是一些圆点和连接这些圆点的直线组成 例如上图的这五个定点和四条边 我们现在从1号顶点开始遍历整个图 xff0c 遍历指的就是把图的每一个顶点都访问
  • 暴力的枚举

    枚举算法又叫穷举算法 xff0c 光听名字就是能知道这个很暴力 有一个题 xff1a 3 6528 61 3 8256 xff0c 在两个方框里面填入相同的数字使得等式成立 你可能会觉得这个很简单 xff0c 3行代码就可以搞定 xff1a
  • 虚拟机的使用及基本命令

    虚拟机的使用 kiosk 64 foundation0 Desktop rht vmctl view desktop 显示虚拟机 kiosk 64 foundation0 Desktop rht vmctl start desktop 打开
  • 【虚拟机网络问题】关于怎么解决Ubuntu上Linux网络突然失灵这个问题的若干方案汇总

    虚拟机网络问题 关于怎么解决Ubuntu上Linux网络突然失灵这个问题的若干方案汇总 PS xff1a 本文仅是针对个人使用基于Ubuntu18 04上的Linux系统问题相关记录 xff0c 便于遇到此类问题快速解决 前言 本篇文章在参
  • sublime text 3+mingw搭建C++编译环境

    sublime text 3 43 mingw搭建C 43 43 编译环境 附上Sublime Text下载地址和MinGW下载链接 目录 sublime text 3mingw搭建C编译环境 目录安装MinGW系统配置环境 配置参数简单测
  • React 属性验证 propTypes

    React 组件可以根据预先设置进行属性验证 React prop验证使用 propTypes xff0c 它可以保证我们的应用组件被正确使用 xff0c React PropTypes 提供很多验证器 validator 来验证传入数据是
  • 【2023年最新版】Kali安装详细教程

    一 前期准备 kali镜像下载地址 前排提醒 xff1a 文末有绿色安装包领取 xff01 二 VMware虚拟机配置 1 打开vmware xff0c 点击创建新的虚拟机 2 选择自定义 高级 选项 xff0c 点击下一步 3 继续下一步
  • 七段码 蓝桥杯 python

    这题我是跟着别人的写出来的 xff0c 也就是暴力出来的 xff0c 真不清楚别人怎么将dfs bfs应用进去的 记得7根一根根亮的7中情况 xff0c 和7根都亮的1种情况 整题非常暴力 xff0c 即将2到6的所有组合写出来 xff0c

随机推荐