数组下标和指针的效率问题
看过《C和指针》的鱼油能不能解释一下使用数组指针和直接使用下标的效率哪个高?书里说是指针高,百度不少答案说下标效率高。 这个问题没有标准答案,不同的编译器很可能会有不同的结果全看编译器如何做 个人感觉指针高一些 在我的系统上是数组下标效率高
数组下标 用了9条指令
指针用了10条指令
main.o: file format pe-x86-64
Disassembly of section .text:
0000000000000000 <main>:
#include <stdio.h>
int main(void)
{
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 83 ec 60 sub $0x60,%rsp
8: e8 00 00 00 00 callqd <main+0xd>
int a;
for(int i = 0; i < 10; ++i)
d: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
14: eb 11 jmp 27 <main+0x27>
{
a = 0;
16: 8b 45 fc mov -0x4(%rbp),%eax
19: 48 98 cltq
1b: c7 44 85 c0 00 00 00 movl $0x0,-0x40(%rbp,%rax,4)
22: 00
for(int i = 0; i < 10; ++i)
23: 83 45 fc 01 addl $0x1,-0x4(%rbp)
27: 83 7d fc 09 cmpl $0x9,-0x4(%rbp)
2b: 7e e9 jle 16 <main+0x16>
}
for(int *ap = a; ap < a + 10; ++ap)
2d: 48 8d 45 c0 lea -0x40(%rbp),%rax
31: 48 89 45 f0 mov %rax,-0x10(%rbp)
35: eb 0f jmp 46 <main+0x46>
{
*ap = 0;
37: 48 8b 45 f0 mov -0x10(%rbp),%rax
3b: c7 00 00 00 00 00 movl $0x0,(%rax)
for(int *ap = a; ap < a + 10; ++ap)
41: 48 83 45 f0 04 addq $0x4,-0x10(%rbp)
46: 48 8d 45 c0 lea -0x40(%rbp),%rax
4a: 48 83 c0 28 add $0x28,%rax
4e: 48 3b 45 f0 cmp -0x10(%rbp),%rax
52: 77 e3 ja 37 <main+0x37>
}
return 0;
54: b8 00 00 00 00 mov $0x0,%eax
}
59: 48 83 c4 60 add $0x60,%rsp
5d: 5d pop %rbp
5e: c3 retq
5f: 90 nop
BngThea 发表于 2018-5-10 19:37
个人感觉指针高一些
感觉····· 人造人 发表于 2018-5-10 19:38
在我的系统上是数组下标效率高
数组下标 用了9条指令
指针用了10条指令
{:10_266:}谢谢你的意见,虽然我看不懂汇编语言 tc3.0 指针效率高
数组下标 用了10条指令
指针用了8条指令
seg000:0291 sub_10291 proc near ; CODE XREF: start+155p
seg000:0291
seg000:0291 var_14 = byte ptr -14h
seg000:0291 var_s0 = byte ptr0
seg000:0291
seg000:0291 push bp
seg000:0292 mov bp, sp
seg000:0294 sub sp, 14h
seg000:0297 push si
seg000:0298 push di
printf("main: 0x%X\n", main);
seg000:0299 mov ax, 291h
seg000:029C push ax
seg000:029D mov ax, 0AAh ; '
seg000:02A0 push ax
seg000:02A1 call sub_10F0A
seg000:02A4 pop cx
seg000:02A5 pop cx
for(i = 0; i < 10; ++i)
seg000:02A6 xor di, di
seg000:02A8 jmp short loc_102B8
seg000:02AA ; ---------------------------------------------------------------------------
seg000:02AA
seg000:02AA loc_102AA: ; CODE XREF: sub_10291+2Aj
seg000:02AA mov bx, di
seg000:02AC shl bx, 1
seg000:02AE lea ax,
seg000:02B1 add bx, ax
seg000:02B3 mov word ptr , 0
seg000:02B7 inc di
seg000:02B8
seg000:02B8 loc_102B8: ; CODE XREF: sub_10291+17j
seg000:02B8 cmp di, 0Ah
seg000:02BB jl short loc_102AA
for(ap = a; ap < a + 10; ++ap)
seg000:02BD lea ax,
seg000:02C0 mov si, ax
seg000:02C2 jmp short loc_102CB
seg000:02C4 ; ---------------------------------------------------------------------------
seg000:02C4
seg000:02C4 loc_102C4: ; CODE XREF: sub_10291+3Fj
seg000:02C4 mov word ptr , 0
seg000:02C8 add si, 2
seg000:02CB
seg000:02CB loc_102CB: ; CODE XREF: sub_10291+31j
seg000:02CB lea ax,
seg000:02CE cmp ax, si
seg000:02D0 ja short loc_102C4
return 0;
seg000:02D2 xor ax, ax
seg000:02D4 jmp short $+2
seg000:02D6 ; ---------------------------------------------------------------------------
seg000:02D6
seg000:02D6 loc_102D6: ; CODE XREF: sub_10291+43j
seg000:02D6 pop di
seg000:02D7 pop si
seg000:02D8 mov sp, bp
seg000:02DA pop bp
seg000:02DB retn
seg000:02DB sub_10291 endp
人造人 发表于 2018-5-10 23:37
tc3.0 指针效率高
数组下标 用了10条指令
指针用了8条指令
之前不是说下标效率高来着吗?? 程序员的救赎 发表于 2018-5-11 12:52
之前不是说下标效率高来着吗??
之前的之前还说过一句话
人造人 发表于 2018-5-11 12:57
之前的之前还说过一句话
哈哈~我迟点去学汇编基础,到时候再讨论 程序员的救赎 发表于 2018-5-11 23:30
哈哈~我迟点去学汇编基础,到时候再讨论
^_^
页:
[1]