相关疑难解决方法(0)

哪个(如果有的话)C++编译器会进行尾递归优化?

在我看来,在C和C++中进行尾递归优化是完美的,但是在调试时我似乎永远不会看到表示此优化的帧堆栈.这有点好,因为堆栈告诉我递归的深度.但是,优化也会很好.

是否有任何C++编译器进行此优化?为什么?为什么不?

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

  • 对于MSVC:/O2/Ox
  • 对于海湾合作委员会:-O2-O3

如何在某种情况下检查编译器是否已完成此操作?

  • 对于MSVC,启用PDB输出以跟踪代码,然后检查代码
  • 对于GCC ..?

我仍然会建议如何确定编译器是否对某个函数进行了优化(尽管我发现它让人放心,Konrad告诉我假设它)

总是可以通过进行无限递归来检查编译器是否完成此操作,并检查它是否导致无限循环或堆栈溢出(我用GCC做了这个并且发现这-O2已经足够了),但我想成为能够检查我知道的某个功能无论如何都会终止.我很想有一个简单的方法来检查这个:)


经过一些测试,我发现析构函数破坏了进行优化的可能性.有时可能值得更改某些变量和临时值的范围,以确保它们在return语句开始之前超出范围.

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

c++ optimization tail-recursion

144
推荐指数
5
解决办法
4万
查看次数

运行时通常使用函数语言代码的命令式解释

关于函数式语言的解释,我有一个普遍的问题:

在运行时使用函数式语言与命令式语言(或者转向解释器)实际上是否有任何优势?

我看到的所有问题(例如这个)都没有真正解决这个问题,搜索充满了关于不同语言定义的争论.

编辑:剥离到我最终需要回答的唯一问题.

interpreter ocaml haskell functional-programming imperative-programming

5
推荐指数
1
解决办法
612
查看次数