利用模板元编程实现解循环优化
2008-08-09 19:26:08 来源:WEB开发网测试环境 :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<<(...) 返回的是自身引用,所以可以进行链式输出
更多精彩
赞助商链接