知识大全 Viusal C++.NET 2003 的优化代码
Posted 知
篇首语:笛里谁知壮士心,沙头空照征人骨。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Viusal C++.NET 2003 的优化代码相关的知识,希望对你有一定的参考价值。
Viusal C++.NET 2003 的优化代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
前言 人们在使用一个新的编程工具时总会感到缺乏自信 本文试图让你对VC的代码优化有更直观的感觉 希望你能通过阅读本文从VC中 得到 更多的东西 Visual C++ NET VC NET 不仅带来了两个新的优化选项 它还改进了VC NET 中一些优化的性能 第一个新增选项是 /G 它告诉编译器对Intel Pentium 和AMD Athlon处理器进行优化 使用 /G 选项编译的程序 当我们和VC NET 生成的代码比较时发现 它通常能使典型的程序的运行速度提高 到 个百分点 如果使用了大量浮点代码甚至能提高 到 个百分点 而提高的优化程度可能很高也可能较低 在一些使用最新CPU和 /G 选项的测试中 甚至提高了 %的性能 使用 /G 选项不代表生成的代码只能运行在Intel Pentium 和AMD Athlon处理器上 这些代码仍可以运行在老的CPU上 只是在性能表现上可能有 小小的惩罚 另外 我们观察到一些程序使用 /G 后在AMD Athlon上运行的比用Intel Pentium 更慢 当没使用 /Gx 选项时 编译器会默认使用 /GB 选项 此时为 blended 优化模式 在VC NET 和VC NET 中 /GB 代表 /G 即为Intel Pentium Pro Pentium II Pentium III处理器优化 这儿有一个例子 它展示了做与常整数乘法时使用Pentium 和 /G 的优化效果 下面是源代码 int i; … // Do something that assigns a value to i … return i* ; 当使用 /G 时 生成了目标代码 mov eax DWORD PTR _i$[esp ] imul eax 当使用 /G 时 生成了更快(可惜更长)的代码 它没用imul(乘)指令 在Pentium 上执行只需要 个周期 目标代码如下 mov ecx DWORD PTR _i$[esp ] mov eax ecx shl eax sub eax ecx 第二个优化选项是 /arch:[argument] 用它可对SSE或SSE 优化 生成使用Streaming SIMD Extensions (SSE) 和 Streaming SIMD Extensions (SSE ) 指令集的程序 当使用 /arch:SSE 选项时 目标代码只能运行在支持SSE指令(如 CMOV FI FIP FUI FUIP)的CPU上 当使用 /arch:SSE 选项时 目标代码只能运行在支持SSE 指令集的CPU上 相比于 /G 使用了SSE或SSE 优化的程序 一般能减少 %的运行时间 个别测试中甚至能减少 %的运行时间 使用 /arch:SSE 可得到以下效果 在使用单精度浮点数时 使用SSE指令对其处理 使用CMOV指令 它最早被Pentium Pro支持 使用FI FIP FUI FUIP指令 它们也是最早被Pentium Pro支持的 使用 /arch:SSE 的话 可以得到所有 /arch:SSE 选项的效果 另外还有以下几个效果 在使用双精度浮点数时 使用SSE 指令对其处理 使SSE 指令集做 位切换 (原文 Making use of SSE instructions for bit shifts) 还有其它的好处 在同时使用 /arch:SSE 或 /arch:SSE 和 /GL (全程优化)选项选项时 编译器会对浮点参数和浮点返回值做函数调用规则优化 上面说的几点优化特性已经包括于VC NET 里了 另外还有一点就是能消除 死参数 从没被用过的参数 比如 int f (int i int j int k) return i + k; int main() int n = a+b+c+d; m = f ( n ); return ; 在函数f ()中 第二个参数从没被使用过 当我们用 /GL (全程优化)选项时 编译器将产生如下目标代码来调用f () mov eax mov ecx call ?f @@YAHHHH@Z mov DWORD PTR ?m@@ HA eax 在这个例子里 变量 n 从没被运算 只有两个参数被f ()使用 所以只传递那两个参数(并且它们是从寄存器传过去的 这比使用栈传更快) 另外 编译这个例子时要禁止内联(inlining) 否则函数f ()就不存在了 而直接给m赋予值 Visual C++ NET VC NET 引入了全程优化(Whole Program Optimization 缩写为WPO)的概念 /GL 选项代表使用全程优化 全程优化意味着 编译器在 obj文件中存放的是代码的中间表达而不是目标代码 在连接时连接器对其优化处理并生成真正的目标代码 全程优化的一个主要好处在于我们可以跨越源文件进行函数内联 这将大大提高程序的性能 还有一个好处在于编译器可以跟踪内存和寄存器的使用 以便优化使函数调用的开销更小
cha138/Article/program/net/201311/11533相关参考
.Net课堂:ASP.NET常用的优化性能方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数
VS2003无法调试asp.net的解决方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 确认
优化.NET的性能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! )避免使用ArrayList
代码最优化.NET中的内存管理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在NET中内存管理
ASP.NET如何进行性能优化问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一SqlDat
ASP.NET错误处理和程序优化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
ASP.NET如何进行性能优化问题[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 四控件的
ASP.NET站点应该从哪些方面优化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在用ASPN
ASP.NET如何进行性能优化问题[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 二查询语
ASP.NET如何进行性能优化问题[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一Sql