您所在的位置: 首页>>开发>>.Net>>vc++.net>>

Viusal C++.NET 2003 的优化代码(2)

  • 摘要:人们在使用一个新的编程工具时总会感到缺乏自信,本文试图让你对VC的代码优化有更直观的感觉,希望你能通过阅读本文从VC中“得到”更多的东西。
  • 标签:C++  .NET  优化  性能

Visual C++ .NET 2002

VC.NET 2002引入了全程优化(Whole Program Optimization,缩写为WPO)的概念,“/GL”选项代表使用全程优化。全程优化意味着:编译器在.obj文件中存放的是代码的中间表达而不是目标代码,在连接时连接器对其优化处理并生成真正的目标代码。

全程优化的一个主要好处在于我们可以跨越源文件进行函数内联,这将大大提高程序的性能。还有一个好处在于编译器可以跟踪内存和寄存器的使用,以便优化使函数调用的开销更小。

下面的代表展示了全程优化的表现:

// File 1
extern void func (int *, int *);
int g, h;
int
main()
{
int i = 0;
int j = 1;
g = 5;
h = 6;
func(&I, &j);
g = g + i;
h = h + i;
return 0;
}
// File 2
extern int g;
extern int h;
void
func(int *pi, int *pj)
{
*pj = g;
h = *pi;
}

当不使用“/GL”选项时,生成了如下代码:

sub esp, 8
lea eax, DWORD PTR _j$[esp+8]
push eax
lea ecx, DWORD PTR _i$[esp+12]
push ecx
mov DWORD PTR _i$[esp+16], 0
mov DWORD PTR _j$[esp+16], 1
mov DWORD PTR ?g@@3HA, 5
mov DWORD PTR ?h@@3HA, 6
call ?func@@YAXPAH0@Z
mov eax, DWORD PTR _i$[esp+16]
mov edx, DWORD PTR ?g@@3HA
mov ecx, DWORD PTR ?h@@3HA
add edx, eax
add ecx, eax
mov DWORD PTR ?g@@3HA, edx
mov DWORD PTR ?h@@3HA, ecx
xor eax, eax
add esp, 16
ret 0

当使用了“/GL”时,你会看到下面的代码,现在的代码短多了。注意编译这个例子时同样要注意关掉内联优化。

sub esp, 8
lea ecx, DWORD PTR _j$[esp+8]
lea edx, DWORD PTR _i$[esp+8]
mov DWORD PTR _i$[esp+8], 0
mov DWORD PTR ?g@@3HA, 5
mov DWORD PTR ?h@@3HA, 6
call ?func@@YAXPAH0@Z
mov DWORD PTR ?g@@3HA, 5
xor eax, eax
add esp, 8
ret 0

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)



共2页: 上一页 [1] 2
【内容导航】
网络应用性能控管最佳实践
如何优化IT 控制能耗
C++是垃圾语言?!
VC++基础开发专题
主流防火墙性能对比分析
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有