📝 compiler
64篇技术文档📅  最后修改于: 2020-12-06 08:09:30        🧑  作者: Mango
与机器无关的优化机器无关的优化尝试改进中间代码以获得更好的目标代码。此处转换的代码部分不涉及任何绝对内存位置或任何CPU寄存器。中间代码生成的过程引入了很多低效率的问题,例如:使用变量而不是常量,额外的变量副本,重复计算表达式。通过代码优化,您可以消除这种效率并改善代码。它有时可能会改变程序的结构,使其无法识别,例如:展开循环,内联函数,消除程序员定义的某些变量。代码优化可以通过以下不同方式执行:...
📅  最后修改于: 2020-12-06 08:10:27        🧑  作者: Mango
循环优化循环优化是最有价值的与机器无关的优化,因为程序的内部循环占用了程序员大量的时间。如果我们减少一个内部循环中的指令数量,那么即使我们增加该循环之外的代码量,也可以改善程序的运行时间。对于循环优化,以下三种技术很重要:代码运动感应变量消除强度降低1.代码运动代码运动用于减少循环中的代码量。这种转换采用一条语句或表达式,该语句或表达式可以移到循环体之外,而不会影响程序的语义。例如在while语句...
📅  最后修改于: 2020-12-06 08:11:24        🧑  作者: Mango
基本块的DAG表示基本块的DAG是有向无环图,在节点上带有以下标签:图的叶子由唯一标识符标记,该标识符可以是变量名或常量。图的内部节点由运算符标记。还为节点提供了一系列标识符标签,用于存储计算值。DAG是一种数据结构。它用于在基本块上实现转换。DAG提供了一种确定公共子表达式的好方法。它给出了该语句所计算的值如何在后续语句中使用的图形表示。DAG的构建算法输入:它包含一个基本块输出:它包含以下信息...
📅  最后修改于: 2020-12-06 08:12:18        🧑  作者: Mango
全局数据流分析为了有效地优化代码,编译器会收集有关程序的所有信息,并将此信息分发到流程图的每个块。此过程称为数据流图分析。某些优化只能通过检查整个程序来实现。仅检查程序的一部分是无法实现的。对于这种优化,用户定义的链接是一个特定的问题。在这里,使用变量的值,我们尝试找出变量的哪个定义适用于语句。根据本地信息,编译器可以执行一些优化。例如,考虑以下代码:在此代码中,x的第一个分配是无用的。 x的值计...