gpt4 book ai didi

c++ - Visual C++ 尾调用优化

转载 作者:太空狗 更新时间:2023-10-29 20:32:10 27 4
gpt4 key购买 nike

根据该问题的答案: Which, if any, C++ compilers do tail-recursion optimization?看来,编译器应该进行尾递归优化。

但我已经尝试了建议的选项,似乎编译器无法在模板函数的情况下进行此优化。它能以某种方式修复吗?

最佳答案

我不使用 MS 编译器,但 GCC 当然可以对模板进行尾递归优化。鉴于此功能:

template <typename T>
T f( T t ) {
cout << t << endl;
if ( t == 0 ) {
return t;
}
return f( t - 1 );
}

生成的代码是:

    5   T f( T t ) {
6 cout << t << endl;
- 0x401362 <main+22>: mov %esi,0x4(%esp)
- 0x401366 <main+26>: movl $0x4740c0,(%esp)
- 0x40136d <main+33>: call 0x448620 <_ZNSolsEi>
- 0x401372 <main+38>: mov %eax,%ebx
7 if ( t == 0 ) {
- 0x4013a5 <main+89>: test %esi,%esi
- 0x4013a7 <main+91>: je 0x4013c8 <main+124>
8 return t;
9 }
10 return f( t - 1 );
- 0x4013a9 <main+93>: dec %esi
- 0x4013aa <main+94>: jmp 0x401362 <main+22>
11 }

可以看到递归调用变成了跳回函数开头。如果代码是在启用优化的情况下编译的(在本例中为 -O2),则此优化仅由 GCC 执行 - 也许对于 MS C++ 也是如此?

关于c++ - Visual C++ 尾调用优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2385599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com