Visual C++优化概述

摘要:演示了Visual C++ 2003 编译器提供的众多代码优化功能中的几项功能。

Microsoft Visual C++ Toolkit 2003 包含优化 C++ 编译器。大多数开关相当简明,并且已经在 Visual C++ 产品的多个版本中存在,但仍然有两个开关比较新,并且无须重写代码就能够显著提高速度。它们是 /GL (Whole Program Optimization) 和 /G7(它能产生为 Pentium 4 或 AMD Athlon 优化的代码)。还有一个选项 /arch:SSE2,它能产生针对 SSE2 寄存器和指令而优化的代码。

示例代码经过了三项测试:

1.调用作为内联候选函数的函数。

2.执行大量浮点乘法和加法运算。

3.执行大量整数乘法和加法运算。

完整程序优化

示例代码定义了两个非常类似的函数:Add() 和 DisplayAdd()。DisplayAdd() 会显示到屏幕,因此不太可能被内联:

void DisplayAdd(int a, int b)
{
  cout << a << " + " << b << " = " << a + b << endl;
  cout << "Return address from " << __FUNCTION__
    << " " << _ReturnAddress() << endl;
}

_ReturnAddress 是一个内部函数,它报告控制将在何处返回。可使用它来标识内联函数。

Add() 在 gl-g7.cpp 中声明,同时还声明一个由它设置的全局变量:

void* inlineReturnAddress; // set in Add()
int Add(int a, int b); // implementation in module.cpp

实现位于 module.cpp 中:

int Add(int a, int b)
{
  inlineReturnAddress = _ReturnAddress();
  return a+b;
}

要编译该程序且不使用 Whole Prgram Optimization,请使用以下命令行:

cl /O2 /ML /EHsc GL-G7.cpp module.cpp

要运行测试 1,请使用以下命令:

gl-g7 1

应该看到与以下内容类似的输出(数值地址会有所不同):

1 + 2 = 3
Return address from DisplayAdd 00401D0A
1 + 2 = 3
Return address from Add 00401D13
Return address from Test1 00402125

Add() 的返回地址与 Test1() 的返回地址不同:Add() 没有被内联。

现在,使用 /GL 重新编译:

cl /O2 /ML /EHsc /GL GL-G7.cpp module.cpp

再次运行测试 1,应该看到如下所示的输出:

1 + 2 = 3
Return address from DisplayAdd 00401242
1 + 2 = 3
Return address from Add 0040179F
Return address from Test1 0040179F

现在,Add() 和 Test1() 的返回地址相同:Add() 在 Test1() 内部内联,即使它的代码来自另一个文件。

时间: 2024-10-29 20:31:49

Visual C++优化概述的相关文章

《ASP.NET 开发从入门到精通》----2.2 Visual Studio 2012概述

2.2 Visual Studio 2012概述 知识点讲解:光盘:视频\PPT讲解(知识点)\第2章\全新的Visual Studio 2012.avi Visual Studio.NET是微软为适用.NET平台而推出的专用开发工具,它是一个集成的开发环境,能够编写Visual Basic.NET.Visual C++ .NET.Visual C#.NET和Visual J# .NET等专业编程语言.通过Visual Studio 2012可以在同一项目内使用不同的语言,并能实现它们之间的相互

用Visual C++优化代码

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

Visual C++优化对大型数据集合的并发访问

摘要 应用程序性能不仅仅与速度有关.在 Web 服务器环境中,卓越的性能还意味着确保可以并发地为最大数量的用户服务.这可以通过高效地使用多处理器计算机和线程管理来达到.本文介绍了可以解决许多并发性问题的技术.一种方法是使用线程管理,在线程基础上控制对数据库的访问 - 这可以保护数据的完整性.在本文中,生成并提供了可重用的线程类.然后,对这些类进行了测试,并在实际环境中分析了它们的性能. 服务器应用程序的成功与否迟早将归结为性能.但是,服务器应用程序中的性能不完全等同于纯粹的速度.您还必须考虑并发

A*寻路极限优化概述

github源码:https://github.com/boycy815/fastAStar 这几天在天地会上看到有算法比赛,比的是谁实现的A*寻路速度快,虽然比赛不是那么正规,但是这种展现实力的机会咱也不能落后是不,于是咱也折腾出一个算法提交上去,帖子在此:http://bbs.9ria.com/forum.php?mod=redirect&goto=findpost&ptid=172851&pid=1668442&fromuid=64655 128*128地图规模下10

WEB应用程序的测试与优化概述

"让你的WEB应用程序完成你想做的事情是一回事,而让他们快速.有效的去做常常是另外一回事." 在这篇文章里我将初步讨论有关"WEB应用程序的性能"的问题,主要是一些基本概念以及工具,算是抛砖引玉吧!注意这些内容同样适用于J2EE应用.此后,也许我会写更多关于此方面的文章. 首先,这里有两个性能方面的重要指标.请注意,下面的"定义"并不规范,仅供参考. * Response Time - 响应时间 从初始化请求到完成响应所用的时间.这是一个测试WE

【性能优化】ORACLE数据库性能优化概述

   为了保证ORACLE数据库运行在最佳的性能状态下,在信息系统开发之前就应该考虑数据库的优化策略.优化策略一般包括服务器操作系统参数调整.ORACLE数据库参数调整.网络性能调整.应用程序SQL语句分析及设计等几个方面,其中应用程序的分析与设计是在信 分析评价ORACLE数据库性能主要有数据库吞吐量.数据库用户响应时间两项指标.数据库吞吐量是指单位时间内数据库完成的SQL语句数目:数据库用户响应时间是指用户从提交SQL语句开始到获得结果的那一段时间.数据库用户响应时间又可以分为系统服务时间和

MySQL数据库优化概述

一,数据库优化的目的  1,避免出现页面访问错误     由于数据库的timeout产生的5**错误:     由于慢查询造成的也没无法加载:     由于阻塞造成数据无法提交: 2,增加数据库的稳定性     很多数据库的问题都是由于低效的查询引起的: 3,优化用户体验     流畅页面的访问速度:     良好的网址功能体验: 二,数据库优化的角度 SQL及索引:避免慢查询,阻塞操作: 数据库表结构:满足三范式,冗余设计:分库分表: 系统配置:linux打开文件数目: 硬件:磁盘选择,如SS

百度网盟推广优化概述

合理的投放设置为优化的基础,成功的营销效果来自于持续的优化.网盟推广将推广信息展现在丰富的内容网络上,即通过大量的宣传提升http://www.aliyun.com/zixun/aggregation/12972.html">品牌价值,又吸引目标消费者进行点击访问以及产生购买等行为.我们需要优化我们的推广行为,提升推广的投资回报率.根据成功客户经验,在新帐户/新产品推广的建立阶段,要通过资金投入进行测试来为以后高回报打好基础.测试资金的投入,需要进行推广优化来保证后期的高回报阶段. 在网盟

Visual C++ 2005中的命名返回值优化

多年来,Microsoft Visual C++编译器一直在努力寻求更新的技术与优化方式,以求最大可能地提高程序的性能.此文描述了Visual C++编译器在不同情况下,是怎样消除多余的复制构造函数和析构函数的. 通常来说,当方法返回对象的一个实例时,会创建一个临时对象,并通过复制构造函数复制到目标对象中.在C++标准中,允许省略复制构造函数(哪怕会导致不同的程序行为),但这有一个副作用,就是编译器可能会把两个对象当成一个.Visual C++ 8.0(Visual C++ 2005)充分利用了