![]() |
1
47
C++中的限制是由于堆栈的最大大小。这通常比ram的大小小几个数量级,但仍然相当大。(幸运的是,像string这样的大东西 内容 通常不在堆栈本身上。)
堆栈限制通常在操作系统级别可调。(参见文档了解
[编辑]当然,在计算递归的深度时,堆栈的大小本身并不完全有帮助。要知道这一点,你必须计算 激活记录 递归函数(也称为堆栈帧)的(或记录)。最简单的方法(据我所知)是使用反汇编程序(大多数调试器的一个特性)并在每个函数的开始和结束读取堆栈指针调整的大小。很乱。(例如,您可以用其他方法来计算两次调用中指向变量的指针之间的差异,但它们甚至更糟糕,特别是对于可移植代码而言。从反汇编中读取值在imo中更容易。) |
![]() |
2
22
不,C++没有明确的递归深度。如果超过了最大堆栈大小(在Windows上默认为1 MB),则C++程序将溢出堆栈,执行将被终止。 |
![]() |
3
6
在C或C++标准中没有递归深度跟踪或限制。在运行时,深度受堆栈增长的大小限制。 |
![]() |
4
3
C++具有最大递归深度,受堆栈限制。然而,现代操作系统能够在用户空间堆栈填满时动态扩展它,仅通过内存空间和内存碎片限制递归深度。 |
![]() |
5
3
我认为限制是平台上可用堆栈的大小。据我所知
|
![]() |
6
3
Python有一个 tunable limit 递归调用,而C++受限于堆栈大小。 此外,许多语言或编译器可以通过删除调用者的堆栈帧来优化尾部递归,这样就不会消耗额外的堆栈空间。(在尾部递归中,调用函数唯一做的事情是在进行递归调用之后返回递归调用的返回值。)
python不优化尾部递归(但是 stackless Python )和C++不需要尾递归优化,但我相信GCC优化尾部递归。jvm不会优化尾部递归,尽管scala语言在某些常见的文档案例中会这样做。scheme和lisp(可能还有其他函数式语言)要求优化尾部递归。 |
![]() |
Rackover · 超过PHP二进制限制 8 年前 |
![]() |
ulima2_ · Jekyll截断博客帖子数量的条件是排除一些 8 年前 |
![]() |
Kabhi · 相当于Postgres查询的SQL Server 8 年前 |
![]() |
Zelphir Kaltstahl · 在Racket中指定内存限制 9 年前 |
|
sinabakh · 限制套接字io连接数 9 年前 |