头像-238443

Lee睿晨

个人成就

获得 0 次赞

帮助过2人

信号源的测量

用钳形表

编译器优化问题

编译器的优化过程:优化过程是所谓的“NP完全问题(NP-complete problem)”复杂度理论的例子。但现代的优化程序并不尝试完全的可能,只是用启发式和案例型算法来确定机器码应采取的转换过程。最好不要使用goto语句,goto不见可能降低程序的可读性,还可能导致程序不能规约,使得编译器的优化工作很难进行。常用的优化措施有下面7种:(1) 常量折叠:即编译时计算出常量表达式的值。(2) 常量传播:即如果变量被赋值以常量,常量传播会将所有变量替换成常量。(3) 死代码消除:删除不会被执行的目标码。(4) 公共子表达式消除:表达式在函数多个地方出现,如果变量值没有改变,仅计算一次。(5) 强度削弱:识别出运算量大的操作,并将其替换为开销较小的等价机器指令序列。(6) 归纳:一个变量的值依赖另外一个时,通常省去计算中间变量的过程。(7) 循环不变量:循环不变量就是不会随着每轮循环改变的表达式,优化程序只在循环体外计算一次并在循环过程中使用。编译器的优化程序能找出循环不变量并使用“代码移动(code motion)”将其移出循环体。编译器的输出与目标文件和可执行文件的格式:编译器有四种可能的输出:高级语言代码(如C++编译器输出C语言代码)、汇编语言代码、目标文件和可执行文件。常见的目标文件格式有:OMF(object Module Format)、COFF(Common object File Format)、PE/COFF(Microsoft推出的COFF变种)和ELF(Executable and linkable Format)。通常可执行文件格式与目标文件格式相似,主要区别是可执行文件中一般没有未解析的外部引用。除了机器码和二进制数据,可执行文件还含有其他元数据,包括调试信息/动态链接信息,还有定义操作系统应怎样将文件各区域调入内存的信息。目标文件通常设计的尽量小,而可执行文件往往设计成尽可能快的导入内存,有时这会使文件增大。由于目标文件可能有多个,生成可执行文件时,链接器可能将目标文件中的同名的多个区域合并成一个区域。

stm32f103运行时会死掉提示重新下载

拔下来再插上试试