目录
前言
在折腾完win10下载Win-TC用不了、先痛苦后享受地做完C#版后,发现实验要求里是有Win-TC附件链接的。不过试了实验室win7系统虽然可以运行,但是生成的asm文件我怎么都没找到,就算了,虽然方向2还想用Win-TC做呢。
本实验实现了方向1、3。另外,由于整个篇幅太长,实验3只给出了设计,完整的可以查完文档。文末给出了C#反汇编的il文件的参考链接。
完整文档及源码可以点击下载:this。
关于实验对比方向
- 方向1-相同编译器下不同优化参数(相同源代码,采用不同的优化参数)的性能对比
- 方向2-不同编译器下相同源代码(例如采用C语言用WinTC和gcc对比;或者C#下采用不同的.NET Framework版本2.0和4.0(版本差最好拉大一点))的性能对比
- 方向3-相同编译器下相同编译参数,不同的源代码写法(源代码结果一样,但实现不同,例如递归和通常的实现等)的对比
关于编译优化
代码编译优化,文末有参考的博文链接,其实老师上课讲的ppt也很清晰。
Debug与Release二者的详细区分:
- Debug:Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。
- Release:Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
VS中可以选择优化参数,如下:
- 汇编原理:编译器对变量的存取速度,寄存器快于内存,最慢是硬盘。(寄存器>内存>硬盘)
相对复杂的工作流程产生了更多的时延,累计起来就比寄存器慢很多,为了提高执行效率,编译器会对有必要优化的变量做访问方式上的处理,这就是编译器对变量的优化。
多数情况下,变量是存放在内存而非寄存器中的,这样对变量的存取效率很低。对于频繁使用的变量,编译器自动地把变量mov到寄存器里,使用的时候直接访问寄存器里的值,以加快存取速度,这就是寄存器对变量的优化。
1、实验目的
在编程语言中,对比不同编程风格的代码写法,或者通过使用不同的编译器和编译优化参数,通过编译器生成汇编代码,静态分析所生成汇编代码的运行效率。
2、实验平台、工具
在Windows平台下,采用visual studio 2015开发工具编写C#程序,并通过VS中引入Microsoft自带的外部工具ildasm反汇编生成il文件。然后使用UltraCompare工具来比较汇编文件的异同(win-TC在win10 64位下无法正常运行)。
3、实验设计
方向1. 相同编译器下不同优化参数的性能对比(相同源代码,采用不同的优化参数)
在VS2015中,编写代码test1如下,使用Debug和Release编译并用ildasm生成对应的汇编代码,再对比分析。
/// <summary>
/// 相同编译器下不同优化参数的性能对比
/// </summary>
///
/// -> Debug和Release编译
/// -> 对比il文件
public static void test1()
{
/// 0.空指令删除--> 很明显,代码中没有了nop字段,程序更加紧凑了。
/// 1.冗余优化-->未使用的变量
Console.WriteLine("->exp1: not use x=27");