【发布时间】:2015-05-26 23:28:37
【问题描述】:
如果我进行尾调用递归(而不是for (;;)...break 循环),我的函数可以更简单地编写。但是我担心如果编译器无法优化它,我会遇到性能问题,特别是因为它将由最终用户编译。
有没有办法告诉编译器“确保优化这个尾调用,否则给我一个错误”(例如 Scala 支持这个)
如果编译器无法优化它,性能限制是多少?在不破坏堆栈的情况下,我预计可以运行多少次尾调用?
更新:
编译器是 gcc 和 MSVC。
通常情况下,我预计会有十几个尾随。但极端情况可能有数千人。平台是典型的低端笔记本电脑(例如 Core i3 或 i5)。
【问题讨论】:
-
您预计大概有多少尾电话?你的目标是什么编译器?
-
如果它真的是尾递归,并且您需要确定编译器会优化掉递归,那么自己将其编码为循环应该很简单。
-
请参阅this answer 以查找可能无法优化尾递归函数的其他一些原因。
标签: c++ optimization recursion tail-call-optimization