当我们想要遍历整个数组并将数组的每个值与数组中存在的数字进行比较时有一个问题,比如arr [0]那么,为什么建议用arr [0]初始化一个int ],比如int acomp = arr [0]并将acomp与数组中存在的每个整数进行比较,而不是将数组中存在的每个整数与arr [0]进行比较? 例如,在下面的联合代码中,我向我指出代码2比代码1更好,但我不太清楚为什么。
perl -V:ivsize
答案 0 :(得分:5)
这是一个正确性问题。 for
循环内的赋值可以修改数组值。您可以修改在分配的比较或右侧使用的元素。这就是为什么你必须在进入循环之前保存它们。
答案 1 :(得分:0)
制作本地副本pid,并且必须在阵列中重复查找值的qid才能进行性能优化。
但是,如果任何现代编译器无法选择并且隐式地进行优化,我会感到惊讶。
答案 2 :(得分:0)
使用https://godbolt.org/可以比较两者。你关心的是循环内的指令。
使用Clang 4.0,程序集是:
代码1
movsxd rax, dword ptr [rbp - 16]
mov ecx, dword ptr [4*rax + arr]
movsxd rax, dword ptr [rbp - 8]
cmp ecx, dword ptr [4*rax + arr]
jne .LBB0_4
movsxd rax, dword ptr [rbp - 12]
mov ecx, dword ptr [4*rax + arr]
movsxd rax, dword ptr [rbp - 16]
mov dword ptr [4*rax + arr], ecx
代码2
movsxd rax, dword ptr [rbp - 24]
mov ecx, dword ptr [4*rax + arr]
cmp ecx, dword ptr [rbp - 16]
jne .LBB0_4
mov eax, dword ptr [rbp - 20]
movsxd rcx, dword ptr [rbp - 24]
mov dword ptr [4*rcx + arr], eax