- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章
(8分)将下面程序划分为基本块,并画出其基本块程序流图。
(1) if ab goto (3)
(2) halt
(3) if cd goto (5)
(4) goto (8)
(5) t1:=y+z
(6) x :=t1
(7) goto (1)
(8) t2:=y-z
(9) x :=t2
(10) goto (1)
11.1答:所谓代码优化即对代码进行等价变换,使得变换后的代码与变换前代码运行结果相同,而运行速度加快或占用存储空间少,或两者兼有。
进行优化的基础是中间或目标代码生成,以及基本块的识别、控制流分析和数据流分析。
2答:根据不同的阶段,分为中间代码优化和目标代码的优化。
根据优化所涉及的程序范围,又可分为局部优化、循环优化和全局优化。
3答:最常用的代码优化技术有:
(1)删除多余运算 (2)代码外提
(3)强度削弱 (4)变换循环控制条件
(5)合并已知量和复写传播 (6)删除无用赋值
4 图11.23是图11.22的C代码的部分四元式代码序列 (1) 请将图11.23的四元式代码序列划分为基本块并做出其流图? (2) 将每个基本块的公共子表达式删除? (3) 找出流图中的循环,将循环不变量计算移出循环外?
(4) 找出每个循环中的归纳变量,并且在可能的地方删除它们
图11.22 void quicksort(m,n) int m,n; { int i,j; int v,x; if (n=m) return; /* fragment begins here */ i = m-1; j = n; v = a[n]; while(1) { do i = i+1;while (a[i]v); do j = j-1; while (a[j]v); if (i=j) break; x = a[i]; a[i] = a[j]; a[j] = x; } x = a[i]; a[i] = a[n]; a[n] = x; /* fragment ends here */ quicksort (m,j); quicksort(i+1,n); }
图11.23 (1) i:=m-1(2) j:=n(3) t1:=4*n(4) v:=a[t1](5) i:=i+1(6) t2:=4*i(7) t3:=a[t2](8) if t3 v goto (5)(9) j:=j-1(10) t4:=4*j(11) t5:=a[t4](12) if t5 v goto (9)(13) if i = j goto (23)(14) t6:=4*i(15) x:=a[t6]
(16) t7:=4*i(17) t8:=4*j(18) t9:=a[t8](19) a[t7]:=t9(20) t10:=4*j(21) a[t10]:=x(22) goto (5)(23) t11:=4*i(24) x:=a[t11](25) t12:=4*i(26) t13:=4*n(27) t14:=a[t13](28) a[t12]:=t14(29) t15:=4*n(30) a[t15]:=x
答:
(1)1-4为第1块,5-8为第2块,9-12为第3块,13句为第4块,14-22为第5块,23-30句为第6块。流图如下:
B1
B2
B3
B4
B5 B6
(2) (14)和(16)都有4*i的运算,将(16)换成t7=t6
(17)和(20)都有4*j的运算,将(20)换成t10=t8
(23)和(25)都有4*i的运算,将(25)换成t12=t11
(3)、(26)和(29)都有4*n的运算,将(26)换成t13=t1,(29)换成t15=t1
(3) 有(5)-(8)、(9)-(12)、(5)-(22)三个循环。三个循环中没有循环不变量。
(4) 在循环(5)-(8)中,有基本归纳变量i和归纳变量t2;
在循环(9)-(12)中,有基本归纳变量j和归纳变量t4;
在循环(5)-(22)中,有基本归纳变量i和归纳变量t7、基本归纳变量j和归纳变量t8、t10。
注意到B6:(23)-(30)不在循环内,且B6
文档评论(0)