编译器在许多时候能够作出相当让人满意的结果。考虑以下的代码:
int a=0; for( int i=1; i<10; i++) for( int j=1; j<100; j++){ a += (i*j); } |
让我们把它变为某种形式的中间代码:
00: 0 -> a 01: 1 -> i 02: 1 -> j 03: i*j -> t 04: a+t -> a 05: j+1 -> j 06: evaluate j < 100 07: TRUE? goto 03 08: i+1 -> i 09: evaluate i < 10 10: TRUE? goto 02 11: [继续执行程序的其余部分] |
程序中执行强度最大的无疑是03到05这一段,涉及的需要写入的变量包括a, j;需要读出的变量是i。不过,最终的编译结果大大出乎我们的意料。下面是某种优化模式下Visual C++ 6.0编译器生成的代码(我做了一些修改):
xor eax, eax ; a=0(eax: a) mov edx, 1 版权申明:未经书面授权请勿转载本站信息!!作品版权归所属媒体与作者所有!!
2003-2005 Ksw123.com All Rights Reserved. - TOP
Copyright © 2006 Ksw123.com. All rights reserved.中国考题网 版权所有
|