标签:工作 配置 完全 初始 rand 强制 一个 data- 应该
把常量表达式的值求出来作为常量嵌在最终生成的代码中。
疑问:对于一个很复杂的常量表达式,编译器会算出结果再编译吗?亦或者是把这个表达式完全翻译成机器码,最终留给程序去解决?
分情况:
考虑如下例子:
int x = 40;
int y = x + 2;
像C语言、Java语言之类的,语言规范层面上都不会把y的初始化表达式 x + 2 规定为一个常量表达式。但我们直觉上觉得编译器应该能把它也给常量折叠起来。
这就需要常量传播优化了。
但是一个变量被允许多次赋值,如:
int x = 40;
x = rand();
int y = x + 2;
要实现常量传播,必须依赖『到达定值』的前向数据流分析 (fastword data-flow analysis)——确定某个定值能被传播到哪些使用点。
标签:工作 配置 完全 初始 rand 强制 一个 data- 应该
原文地址:https://www.cnblogs.com/CocoML/p/12727165.html