以下两个程序哪个的performance高,并解释为什么。
a) extern int foo(void); int main() { int i; for(i=0;i<10000;i++) foo(); return i; }
b) extern int foo(void); int i; int main() { for(i=0;i<10000;i++) foo(); return i; }
如果是debug模式,好像是全局的效率高。因为局部的话还需要通过寄存器间接寻址,全局i则直接寻址。
而如果release的话,vs2005的优化,
局部变量的效率高:因为:
局部i:
mov esi, 10000 ;
[a href="mailto:$LL3@main"]$LL3@main[/a]):
call [a href="mailto:?foo@@YAHXZ"]?foo@@YAHXZ[/a]) ; foo
sub esi, 1
jne SHORT [a href="mailto:$LL3@main"]$LL3@main[/a])
已经将i放入寄存器了
=========================
全局i:
mov eax, DWORD PTR [a href="mailto:?i@@3HA"]?i@@3HA[/a])
add eax, 1
cmp eax, 10000 ; 00002710H
mov DWORD PTR [a href="mailto:?i@@3HA"]?i@@3HA[/a]), eax ; i
jl SHORT [a href="mailto:$LL3@main"]$LL3@main[/a])
每次都读写内存~~
[ 本帖最后由 peterpanxmu 于 2008-9-9 13:48 编辑 ]欢迎光临 应届生求职招聘论坛 (https://bbs.yingjiesheng.com/) | Powered by Discuz! X3.2 |