【实验2】编译器级别的代码优化对比实验(C#)

本文通过实验对比了C#在Visual Studio 2015中Debug和Release模式下的代码优化效果,分析了编译器对变量优化、try-catch处理、跳转简化、临时变量消除等方面的影响。实验表明,Release模式下的代码更紧凑,运行效率更高。此外,还探讨了for循环中使用++和--的效率差异,发现--在某些情况下可能更具优势。
摘要由CSDN通过智能技术生成

目录

前言

关于实验对比方向

关于编译优化

1、实验目的

2、实验平台、工具

3、实验设计

4、实验步骤

5、实验结果讨论


前言

在折腾完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-TCwin10 64位下无法正常运行)。

3、实验设计

方向1. 相同编译器下不同优化参数的性能对比(相同源代码,采用不同的优化参数)

在VS2015中,编写代码test1如下,使用Debug和Release编译并用ildasm生成对应的汇编代码,再对比分析。

        /// <summary>
        /// 相同编译器下不同优化参数的性能对比
        /// </summary>
        /// 
        /// -> Debug和Release编译
        /// -> 对比il文件
        public static void test1()
        {
            /// 0.空指令删除--> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值