首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪些C++编译器会进行尾递归优化?

哪些C++编译器会进行尾递归优化?
EN

Stack Overflow用户
提问于 2008-08-29 07:35:48
回答 5查看 47.3K关注 0票数 160

在我看来,在C和C++中同时进行尾递归优化会非常好,但在调试过程中,我似乎从来没有看到一个框架堆栈来表示这种优化。这很好,因为堆栈告诉我递归有多深。然而,优化也是很好的。

有没有C++编译器做过这样的优化?为什么?为什么不行?

我该如何告诉编译器这样做呢?

微软-O3

  • /O2或 GCC:-O2或MSVC

如何检查编译器在特定情况下是否已经这样做了?

对于MSVC的

  • ,启用PDB输出以能够跟踪代码,然后检查代码

  • ..?

我仍然建议如何确定某个函数是否被编译器像这样优化(即使我发现Konrad告诉我假设它是可靠的)

始终可以通过进行无限递归并检查它是否会导致无限循环或堆栈溢出来检查编译器是否做到了这一点(我和GCC一起做了这件事,发现-O2就足够了),但我希望能够检查某个我知道无论如何都会终止的函数。我希望有一个简单的方法来检查这一点:)

经过一些测试后,我发现析构函数破坏了进行这种优化的可能性。有时,更改某些变量和临时变量的作用域以确保它们在返回语句开始之前超出作用域是值得的。

如果在尾部调用之后需要运行任何析构函数,则无法进行尾部调用优化。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档