首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

指针移动与数组下标移动效率有关问题

2013-08-01 
指针移动与数组下标移动效率问题。看书我硬是没看懂。。。指针运行效率[解决办法]下面下标的访问效率 要高很多

指针移动与数组下标移动效率问题。
指针移动与数组下标移动效率有关问题
看书我硬是没看懂。。。 指针 运行效率
[解决办法]
下面下标的访问效率 要高很多 很多!

下标是直接访问,指针是间接访问
[解决办法]
这书已经过时了。现在cpu的优化指令下,下标访问更快已经是很正常的了。
[解决办法]
这个要测试过才知道
[解决办法]
x86_64位centos,gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)汇编结果


  1 #include <stdio.h>
  2 int main()
  3 {
  4     int a[5], i, *p;
  5     for(i = 0; i < 5; ++i)
  6         a[i] = 0;
  7 
  8     for(i = 0; i < 5; ++i)
  9         *(a + i) = 0;
 10     
 11     for(p = a; p < a + 5; ++p)
 12         *p = 0;
 13     return 0;           
 14 }
~        



    movl    $0, -12(%rbp)
 14     jmp .L2
 15 .L3:
 16     movl    -12(%rbp), %eax
 17     cltq

 18     movl    $0, -32(%rbp,%rax,4)//1条

 19     addl    $1, -12(%rbp)
 20 .L2:
 21     cmpl    $4, -12(%rbp)
 22     jle .L3
 23     movl    $0, -12(%rbp)


 24     jmp .L4
 25 .L5:
 26     movl    -12(%rbp), %eax
 27     cltq

 28     leaq    0(,%rax,4), %rdx//4条
 29     leaq    -32(%rbp), %rax
 30     addq    %rdx, %rax
 31     movl    $0, (%rax)

 32     addl    $1, -12(%rbp)
 33 .L4:
 34     cmpl    $4, -12(%rbp)
 35     jle .L5
 36     leaq    -32(%rbp), %rax
 37     movq    %rax, -8(%rbp)//p = a;
 38     jmp .L6
 39 .L7:
 40     movq    -8(%rbp), %rax
 41     movl    $0, (%rax)//*p=0
 42     addq    $4, -8(%rbp)//++p
 43 .L6:
 44     leaq    -32(%rbp), %rax
 45     addq    $20, %rax
 46     cmpq    -8(%rbp), %rax
 47     ja  .L7
 48     movl    $0, %eax
 49     leave



[解决办法]
这个问题值得考虑,在以前指针应该是要快一些,不过到现在两者的效率已经差不多了.这个因为现在的编译器已经优化了,这个是我在看<<征服C指针>>这本书上说的.
从理论上分析 a[i] == *(a+i)  在利用for循环的时候,每次循环 i++,这里需要计算一次加法,*(a+i) 需要计算一次加法,利用指针的时候,只需要在for循环里面 p++; 这里少计算了一次加法 我想 书上面是这个意思.

[解决办法]
指针,相当于每次+4,下标相当于每次取(a+4i)

热点排行
Bad Request.