计算机的编译程序及语言原理

今天,基本上所有桌面和服务器应用程序编程都是用高级语言完成的。

就像大多数嵌入式应用程序编程这种开发意味着由于大多数指令都是编译器的输出,因此指令集架构主要是编译器目标。使用摩尔定律在指令集中添加复杂操作的诱惑。挑战在于它们可能与编译器需要生成的内容不完全匹配,或者可能如此通用以至于它们不快。例如,考虑计算机中的一些特殊循环指令。假设编译器想要在不等于零的情况下添加四个或不分支,而不是递减,编译器想要在索引小于或等于限制时进行分支。

编译器-有时很难将一些简单的优化与代码生成器中的转换分开-本地和处理器相关的优化,以及可以全局启动的多个优化,尤其是本地优化。优化,以及代码生成过程中。

一些更复杂的编译器和许多研究编译器使用称为分析的技术。过程间分析可获得有关函数及其调用的更多信息。过程间分析试图发现函数调用中的哪些属性保持正确。例如,我们可能会发现函数调用永远不会更改全局变量,这对于优化调用此类函数的循环非常有用。该信息被称为可能的信息或流量不敏感信息,并且可以有效地获得,尽管对替换过程调用的分析调用有些复杂。

函数f需要分析f调用的所有函数,这使得程序对于大型程序来说有点耗时。找到一个更昂贵的属性是一个函数必须总是改变一些变量;据说这些信息提供信息或交通敏感信息。回想一下这个命令是保守的:仅仅因为一个函数,信息永远不能用作必要的信息。能够改变变量并不意味着它必须改变它。但是,负面信息的使用是保守的,因此编译器可以依赖函数来实现不会优化函数调用站点周围的变量。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180901A0UZEF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券