指针和数组的效率对比
来源:互联网 发布:淘宝付费流量占比 编辑:程序博客网 时间:2024/05/18 01:00
我们知道指针表达式和下标表达式是等价的,比如:
array[10] = 10;
*(array + 10) = 10;
或者有时候我们这样写:
2[array]
但因为它表示成指针表达式为*(2 + array) ,所以这种古怪的写法和array[2]是相等的。
那么你应该用哪一个呢?
很多人会选择下标表示,我想他们更多是考虑下标的可读性和容易理解,但如果从性能上讲的话,这个选择可能会影响运行时的效率。
我们来做个实验:
两个循环执行相同的任务,我们看它生成的汇编:
先看数组形式:
注意第8行中 movl $0, -44(%ebp, %eax, 4)
这里操作数-44(%ebp,%eax,4) 在执行过程中会相乘(%ebp + 4*%eax - 44),这个乘法需要花费一定的时间和空间
现在我们看看指针表达式的执行
其实,在执行过程中本来也是存在的乘法,这个乘法运算出现在for语句的调整部分。1 这个值必须与整型的长度相乘,然后再与指针相加。但在每次执行中,执行乘法运算的都是两个相同的数。结果这个乘法就只在编译时执行了一次,程序把4与指针相加。不执行乘法运算。
这个小例子说明了指针比下标更有效率。
现在考虑下面的代码:
a = get_value();
array[a] = 0;
a = get_value();
*(array + a) = 0;
两边的语句所产生的代码并没有区别。a可能是任何值,在运行时方知。所以两种方案都需要乘法指令,用于对a值进行调整。这个例子说明指针和下标的效率完全相同的场合。
- 指针和数组的效率对比
- 指针和数组的对比
- 指针和数组的对比
- 指针和数组的对比
- C小知识点 : 数组和指针遍历的效率
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- 指针与数组的对比
- C++内存分配 指针和数组的对比
- 对比指向文字常量区的指针和数组
- 字符指针变量和字符数组的对比
- 内存分配 指针和数组对比
- 解决ubuntu10.04没有声音的问题
- 日记0829
- vim window 操作
- Oracle基础知识(1)
- JSON 支持库开发手记
- 指针和数组的效率对比
- 我理解的信息化
- 使用 shell 在多个文件中查找, 替换
- Oracle基础知识(2)
- MTK HISTORY 小结 5
- solaris 磁盘阵列
- 了解unix与unix基础命令(1)
- 了解Unix与Unix基础命令(2)
- 找人帮忙解决一个Java程序编译出现异常