Visual C++ 优化概述
2007-03-30 21:32:07 来源:WEB开发网核心提示: cl /O2 /ML /EHsc GL-G7.cpp module.cpp要运行测试 1,请使用以下命令:gl-g7 1应该看到与以下内容类似的输出(数值地址会有所不同):1 + 2 = 3Return address from DisplayAdd 00401D0A1 + 2 = 3Re
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() 内部内联,即使它的代码来自另一个文件。
为 Intel Pentium 4 或 AMD Athlon 优化代码/G7 是 Microsoft?Visual Studio?.NET 2003 中的新增选项;它通过选择与其他场合不同的指令,产生为 Pentium 4 或 AMD Athlon 优化的代码。在对整数进行乘法运算(尤其是将一个整数乘以一个在编译时已知的常数)的例程中,性能方面的改善最为明显。
测试 2 演示了可能获得的速度方面的改善:
#define INT_ARRAY_LEN 100000
int intarray[INT_ARRAY_LEN];
int intCalculate()
{
int total = 0;
for (int i = 1; i < INT_ARRAY_LEN; i++)
{
total += intarray[i-1]*7;
}
return total;
}
void Test2()
{
int var1 = 2;
int i;
for (i = 0; i < INT_ARRAY_LEN; i++)
{
intarray[i] = i*5;
var1 += 2;
}
LARGE_INTEGER start, end;
LARGE_INTEGER freq;
SetThreadAffinityMask(GetCurrentThread(), 1);
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
double total = 0;
for (i = 0; i < 100000; i++)
{
total += intCalculate();
}
QueryPerformanceCounter(&end);
cout << "Total = " << total << endl;
cout << (end.QuadPart - start.QuadPart)/(double)freq.QuadPart << " seconds" << endl;
}
上述代码使用了一些在 kernel32.dll(它是 Microsoft?Windows? 的一部分)中实现的计时函数。这些函数以及它们使用的数据类型在 windows.h 中定义。为减小该示例中的依赖性,在 gl-g7.cpp 中提供了这些函数的原型,并且定义了相应的数据类型。QueryPerformanceCounter 保存了起始时间或结束时间,而 QueryPerformanceFrequency 得到一个值,经过除法运算得到起始时间与结束时间的差值,从而得到以秒为单位的运行时间。对 SetThreadAffinityMask 的调用减少了多处理器计算机上的人工作业。
- ››Visual Basic 2008 数学函数
- ››Visual Studio2005中Smart Device的问题
- ››Visual Studio 中根据数据库字段动态生成控件
- ››Visual Studio 11全新黑色主题
- ››Visual Studio 2011 Beta新特性(一):安装VS201...
- ››Visual Studio自定义调试窗体两个小技巧
- ››Visual Studio 2005 Team Edition for Database P...
- ››Visual C#两分钟搭建BHO IE钩子
- ››Visual C++优化对大型数据集合的并发访问
- ››优化精髓之商业性网站常遇见的问题和误区
- ››优化增强您的Visual C++应用程序
- ››VISUAL C++中的OCX控件的使用方法
更多精彩
赞助商链接