WEB开发网
开发学院软件开发VC 利用模板元编程实现解循环优化 阅读

利用模板元编程实现解循环优化

 2008-08-09 19:26:08 来源:WEB开发网   
核心提示: 测试环境 :Windows Xp sp2,Microsoft Visual Studio 2005 Team Suite,利用模板元编程实现解循环优化(3),release默认设置验证1:该技术真的能和预想的一样,实例化多个函数,并将它们inline,达到解循环的效果吗?让我们写个短小程序

测试环境 :Windows Xp sp2,Microsoft Visual Studio 2005 Team Suite,release默认设置

验证1:

该技术真的能和预想的一样,实例化多个函数,并将它们inline,达到解循环的效果吗?

让我们写个短小程序验证一下:

int main() {
  int v1[] = {1,2,3};
  int v2[] = {4,5,6};
  int r1 = dot_product(3,v1,v2);    //循环版本
  int r2 = dot_product<3>(v1,v2);  //解循环版本
  cout<<r1<<endl;
  cout<<r2<<endl;
  return 0;
}

程序输出当然是2个32,让我们进入反汇编看看实际工作情况:

令人吃惊的是,前4行代码根本没有生成任何机器码

生成机器码的语句只有2条输出语句和return 0;cout<<r1<<endl; // 生成7条指令
mov    eax,dword ptr [__imp_std::endl (402040h)
mov    ecx,dword ptr [__imp_std::cout (402044h)]
push    eax
push    20h
call  dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (40203Ch)]
mov  ecx,eax
call  dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (402038h)]
这些指令的的含义是什么呢?

我们知道 cout<<r1<<endl; 的完整形式是

(cout<<r1)<<endl; 即是 cout.operator<<(r1).operator<<(endl);

cout.opeator<<(...) 返回的是自身引用,所以可以进行链式输出

上一页  1 2 3 4 5 6 7 8  下一页

Tags:利用 模板 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接