Barnes Hut和递归极限
Barnes-Hut and recursion limit
我在n-body模拟器中实现了"Barnes Hut"算法,遇到了一个问题。
我的程序将崩溃,出现与内存相关的异常,主要是stack overflow
异常。
这是一个奇怪的错误,因为它不是在固定的时间发生的,它似乎是突如其来的。使用任务管理器,我可以清楚地看到没有内存泄漏,我一直非常小心地避免这种情况。尽管如此,我还是使用递归,并将对象与in对象一起使用。
我是否可能需要包括oct树的最大深度,这就是导致错误的原因?
最大递归深度确实受到堆栈大小的限制
堆栈大小是而不是与您的完整RAM内存大小相同
例如,在Windows上,默认的堆栈大小(每个线程)是1MB,仅此而已。
可以为您的程序重新配置它,和/或在不导致整个程序崩溃的情况下"捕获"堆栈溢出错误(后者相当脏,但至少是可能的)。
尽管如此,最好的解决方案是修改代码以消除递归。所有递归都可以用迭代解决方案代替,但可能会更复杂一些。每个函数调用的数据都可以移动到一个向量等中,每个调用一个条目,这样动态分配的向量内存就可以使用整个RAM。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 数组元素打印的递归方法
- 使用递归时获取变量的奇怪值
- 如何在C++中递归地按相反顺序打印集合
- 到连接组件算法的问题(递归)
- 如何使用递归打印修改后的星号三角形图案
- 使用递归模板动态分配的多维数组
- OpenMP:即使在深度极限的情况下,递归任务也比顺序慢
- Barnes Hut和递归极限