Objective-C 的最大递归深度限制是多少?
问问题
1682 次
2 回答
5
Objective-C 或大多数语言中没有预设的最大递归深度。
此外,一个简单的测试,你递归并计算直到你出错的次数也不能给你一个现实的答案,它可能会高估你在真实程序中可以达到的深度。
只要堆栈上有足够的空间用于您正在调用的方法/函数的框架,您就可以继续调用。帧包括各种管理信息(通常是固定大小)、保存寄存器(可变大小)和方法/函数的局部变量(可变大小)——因此没有单一的帧大小。
如果您想要一个粗略的近似值,您可以声明一个函数,其中包含代码中出现的局部变量的平均数量和类型,并计算可以递归调用它的次数。这将为您提供正在运行的机器的近似值。
Mac OS X 本身对堆栈大小施加了上限,您可以使用ulimit -s
. 另请参阅此Apple 文档
于 2012-05-04T09:41:45.263 回答
2
它几乎肯定取决于堆栈的大小。
于 2012-05-04T09:18:16.850 回答