Aym*_*ahi 1 c# c++ stack-overflow recursion
当我在C#中编写一些代码时,我有一个递归方法,在几千次调用后导致堆栈溢出异常.
所以过了一会儿,我在C++中编写了相同的代码,它没有例外地工作得很好(即使递归调用的实际数量比C#停止的地方大10倍).
C#和C++在处理这个问题上有什么区别?有没有什么方法可以允许在C#中进行更多的递归调用而不抛出异常?
C#和C++中stackoverflow最显着的区别是:C++没有"堆栈溢出异常"(*).使用C++溢出堆栈的结果只是未定义的行为.它可以做你期望它做的事情,但也可能做一些完全不同的事情.如果你运气好的话,程序会崩溃(由于在堆栈末尾分配了受保护的页面而导致分段违规),如果你运气不好,直到某个时候才会检测到堆栈溢出,现在尝试访问覆盖的内存.
其他可能会导致递归调用的因素:
(*)由于行为未定义,某些实现可能会定义stackoverflow异常并在适当的条件下抛出异常; 但是,没有这样的保证.