gpt4 book ai didi

java - 递归函数中栈溢出的原因

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:11 24 4
gpt4 key购买 nike

this video在 28 分钟左右,一位学生问 Brian Harvey 在编写程序时是否应该始终使用迭代过程而不是递归过程。他说没有,因为

Your programs are not gonna run into space limitations. And in terms of locality of what's in memory, you have to have a lot more control than you do over the way the program is interpreted to really affect that.

因为这不是计划类(class),所以我假设他在这里泛泛地谈论编程语言。当他说““你的程序不会遇到空间限制”时,他是在忽视堆栈溢出吗?我对他的回答感到困惑,因为没有堆栈溢出是否意味着你已经用完了函数调用的空间?而且我对“局部性”部分一无所知。堆栈溢出可能发生在 scheme、java 和其他语言上。我是正确的还是我误解了他的说法?

最佳答案

您所指的视频是计算机科学讲座。计算机科学在很大程度上是理论性的,涉及许多与实用无关的计算细节。在这种情况下,正如他在讲座开始时所说的那样,当今的计算机足够大且速度足够快,性能很少成为问题。


在任何语言中,内存位置都与 StackOverflowException 无关。实际上,内存局部性指的是 SRAM(静态 RAM),它保存着总线从内存(可以是磁盘或 RAM)中检索数据时带来的相邻数据的缓存。从此缓存中获取数据比从内存中获取数据更快,因此如果多个连续操作所需的所有数据都在缓存中,程序将运行得更快。


现在这都是非常低级的。在大多数(如果不是全部)现代语言(如 Java)的背后,都有一个编译器致力于进行大量低级优化。这意味着,首先,您几乎无法在低级别优化代码,尤其是在不干扰编译器优化的情况下。其次,(就像他在你所指的部分之后所说的那样)除非你正在制作资源密集型游戏,否则不值得你花时间担心性能(除非你有明显的性能问题,但更有可能代码中其他问题的指示)。

关于java - 递归函数中栈溢出的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34318804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com