首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尾部呼叫优化(TCO)后的性能测量

尾部呼叫优化(TCO)后的性能测量
EN

Stack Overflow用户
提问于 2008-11-22 13:13:45
回答 4查看 554关注 0票数 0

我知道它是什么了。我的问题是:

1.)如果我编写的代码可以进行尾部调用优化(函数中的最后一条语句递归函数只是一个函数调用,没有其他操作),那么我是否需要设置任何优化级别,以便编译器执行TCO。编译器将在哪种优化模式下执行TCO、空间或时间优化器。

2.)如何找出哪些编译器(MSVC、gcc、ARM-RVCT)支持TCO

3.)假设一些编译器做了TCO,那么我们启用它,那么怎样才能发现编译器实际上已经做了TCO呢?代码大小,告诉它,或者执行它所花费的周期将会告诉你这一点,还是两者都有?

-AD

EN

回答 4

Stack Overflow用户

发布于 2008-11-22 13:29:03

大多数编译器都支持TCO,这是一种相对较旧的技术。至于如何在特定的编译器中启用它,请查看编译器的文档。除了-O1,gcc会在每个优化级别都启用优化,我认为具体的选项是-foptimize-sibling-calls。至于如何判断编译器是否正在执行总拥有成本,请查看汇编程序输出(例如gcc -S)或反汇编目标代码。

票数 2
EN

Stack Overflow用户

发布于 2008-11-22 13:29:42

  1. 优化是特定于编译器的。请查阅文档,了解
  2. 的各种优化标志,您也可以在编译器文档中找到。如果你很好奇,你可以写一个尾递归函数,并给它传递一个大参数,并查找堆栈溢出。(因此,检查生成的汇编程序可能是更好的选择,如果您理解代码generated.)
  3. You,只需使用调试器,并查看函数参数/局部变量的地址。如果它们在调试器显示的每个逻辑帧上增加/减少(或者如果它实际上只显示一个帧,即使您进行了多次调用),您就知道总体拥有成本是完成了还是没有完成。
票数 1
EN

Stack Overflow用户

发布于 2008-11-22 13:28:33

如果希望编译器进行尾部调用优化,只需选中

a)将在哪个优化级别执行的编译器文档,或者

b)检查asm,看函数是否会调用自己(你甚至不需要很强的asm知识就能再次发现函数的符号)

如果你真的想要尾递归,我的问题是:

你为什么不自己执行删除尾部调用呢?这只意味着移除递归,如果它是可移除的,那么不仅可以由底层的编译器,也可以由你在算法层面上,你可以将它直接编程到你的代码中(这意味着除了循环,而不是对自己的调用)。

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

https://stackoverflow.com/questions/311332

复制
相关文章

相似问题

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