Viusal C++.NET的优化代码

前言

人们在使用一个新的编程工具时总会感到缺乏自信,本文试图让你对VC的代码优化有更直观的感觉,希望你能通过阅读本文从VC中"得到"更多的东西。

Visual C++ .NET 2003

VC.NET 2003不仅带来了两个新的优化选项,它还改进了VC.NET 2002中一些优化的性能。

第一个新增选项是"/G7",它告诉编译器对Intel Pentium 4和AMD Athlon处理器进行优化。

使用"/G7"选项编译的程序,当我们和VC.NET 2002生成的代码比较时发现,它通常能使典型的程序的运行速度提高5到10个百分点,如果使用了大量浮点代码甚至能提高10到15个百分点。而提高的优化程度可能很高也可能较低,在一些使用最新CPU和"/G7"选项的测试中,甚至提高了20%的性能。

使用"/G7"选项不代表生成的代码只能运行在Intel Pentium 4和AMD Athlon处理器上。这些代码仍可以运行在老的CPU上,只是在性能表现上可能有"小小的惩罚".另外,我们观察到一些程序使用"/G7"后在AMD Athlon上运行的比用Intel Pentium 4更慢。

当没使用"/Gx"选项时,编译器会默认使用"/GB"选项,此时为"blended"优化模式。在VC.NET 2002和VC.NET 2003中,"/GB"代表"/G6",即为Intel Pentium Pro, Pentium II, Pentium III处理器优化。

这儿有一个例子,它展示了做与常整数乘法时使用Pentium 4和"/G7"的优化效果,下面是源代码:

int i;

// Do something that assigns a value to i.

return i*15;

当使用"/G6"时,生成了目标代码:

mov eax, DWORD PTR _i$[esp-4]

imul eax, 15

当使用"/G7"时,生成了更快(可惜更长)的代码,它没用imul(乘)指令,在Pentium 4上执行只需要14个周期。目标代码如下:

mov ecx, DWORD PTR _i$[esp-4]
mov eax, ecx
shl eax, 4
sub eax, ecx

第二个优化选项是"/arch:[argument]",用它可对SSE或SSE2优化,生成使用Streaming SIMD Extensions (SSE) 和 Streaming SIMD Extensions 2 (SSE2) 指令集的程序。当使用"/arch:SSE"选项时,目标代码只能运行在支持SSE指令(如:CMOV, FCOMI, FCOMIP, FUCOMI, FUCOMIP)的CPU上。当使用"/arch:SSE2"选项时,目标代码只能运行在支持SSE2指令集的CPU上。

相比于"/G7",使用了SSE或SSE2优化的程序,一般能减少2-3%的运行时间,个别测试中甚至能减少5%的运行时间。

使用"/arch:SSE"可得到以下效果:

1。在使用单精度浮点数时,使用SSE指令对其处理。

2。使用CMOV指令,它最早被Pentium Pro支持。

时间: 2024-08-29 11:52:02

Viusal C++.NET的优化代码的相关文章

优化代码:网页技术CSS的font属性的缩写的技巧

css|技巧|网页|优化 优化代码:网页技术CSS的font属性的缩写的技巧,缩写有利于减少代码,优化CSS,使之更加合理. css font属性是用来控制文字字体.颜色.大小等.而font的属性有多种,在通常情况下,我们用缩写的办法将多种属性概括在一句css代码中.这样极大的减小了代码,优化css文件. 我们常用的font属性有下面这六种: font-style设定斜体 如:font-style: italic;font-weight设定文字粗细 如:font-weight: bold;fon

用Visual C++优化代码

摘要:本文介绍了Visual C++ .NET 2003产品中提供的代码优化功能.此外,对于那些还不熟悉 Visual C++ .NET 2002 中进行的改进的读者,本文还用一个较短的部分介绍了在这一改进中引入的新的"全程序优化"功能.最后,本文讨论了一些与优化有关的"最佳策略",以及对 Visual C++ 编译器进行的一般性增强. 简介 虽然得到了一种新的工具,但对于自己是否以可能的最佳方式使用它没有把握,这总是一件令人感到沮丧的事情.该白皮书试图减少您对 V

图像转置的Neon优化代码

图像转置的Neon优化代码 原理 图像转置 图像转置和矩阵转置是一样的,其公式为: dst.getPixels(y, x) = src.getPixels(x, y) dst.w = src.h dst.h = src.w 效果如下: 原图: 结果图: 先做图像转置后,再实现90度/270度的旋转相对容易, 如图像旋转90度,就只需要再水平翻转一下: 旋转结果图: 分而治之 图像转置的优化思路是: 1.将图像分割成一系列小矩阵. 分成的小矩阵当然是越大越好,但在矩阵变大时,汇编代码的复杂度变高,

eden space 100 used-jvm内存怎么设置,以及如何优化代码

问题描述 jvm内存怎么设置,以及如何优化代码 写了一个web程序,可以根据输入的内容抓取网口信息以及串口信息,分别使用了: Jpcap.dll,rxtxSerial.dll 单独开一个测试时正常,但是同时开两个抓取,tomcat就会挂掉,然后生成一个: hs_err_pidXXXX.log文件 于是百度了一下,感觉是jvm内存的问题,就调整了一下: -Xms1024m -Xmx1024m -Xmn600m -XX:PermSize=653m -XX:MaxPermSize=653m -XX:P

为duilib的MenuDemo增加消息响应,优化代码和显示效果

转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/38253297 第一部分         我在前一段时间研究了怎么制作duilib的菜单,花了几天时间以MenuDemo为基础做出个duilib的菜单以备自用,近些天在群里经常会碰到群友问如何给MenuDemo增加消息响应,为了避免重复的回答我特意写这篇日志,希望可以帮到需要之人,同时也介绍了如何美化菜单的效果.动态修改自身的状态以及通过增加属性来优化菜单的xml文件编写

数据库 sqlserver-sqlserver数据库怎样优化代码

问题描述 sqlserver数据库怎样优化代码 select c.participant_name, c.login_id, @year as y, datepart(MONTH,receive_date) as m, b.phase_name as lc, m.manu_number as gh, max(datediff(day, m.submit_date, a.submit_date)) as t from manuflow a left join review_phase b on a

用python做测试实现高性能测试工具(2)—优化代码

在上一篇中我们通过换python的解析器来优化性能.但离实际需求还很远. 方案2: 优化代码 工欲善其事,必先利其器.要优化代码,必须先找到代码的瓶颈所在,最土的方法是添加log, 或者print, 调试完成还需要删除,比较麻烦.python里面也提供了很多profile工具:profile, cProfile, hotshot, pystats, 但这些工具提供的结果可读性不是很好,不够直观的一眼就能看到那个函数或者那一行占用时间最多. python line_profiler 提供了这样的功

《Android 源码设计模式解析与实战》——第1章,第1.1节优化代码的第一步——单一职责原则

第1章 走向灵活软件之路--面向对象的六大原则Android 源码设计模式解析与实战 1.1 优化代码的第一步--单一职责原则单一职责原则的英文名称是Single Responsibility Principle,缩写是SRP.SRP的定义是:就一个类而言,应该仅有一个引起它变化的原因.简单来说,一个类中应该是一组相关性很高的函数.数据的封装.就像老师在<设计模式之禅>中说的:"这是一个备受争议却又及其重要的原则.只要你想和别人争执.怄气或者是吵架,这个原则是屡试不爽的".

mysql海量数据分页优化代码

mysql教程海量数据分页优化代码 page       表示页码 pagesize  表示每页的显示数量 conditon  表示一些条件view sourceprint?1 select * from table where conditon order by id limit (page-1)*pagesize,pagesize; 这样分页在早期没有出现什么问题,但当表里的数据达到了100W,慢慢就出现问题了,搜索几百页的时候,经常要用到2秒多 上网搜索了一下,网上的改法可以参考一下,暂时