首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >堆栈溢出异常中c++和c#的区别

堆栈溢出异常中c++和c#的区别
EN

Stack Overflow用户
提问于 2016-05-30 13:49:39
回答 1查看 212关注 0票数 1

当我用C#编写一些代码时,我有一个递归方法,它在几千次调用后导致堆栈溢出异常。

因此,过了一段时间,我用C++编写了相同的代码,它运行良好,无一例外(尽管递归调用的实际数量大约是C#停止的次数的10倍)。

C#和C++在处理这个问题上有什么区别?我是否可以允许在C#中进行更多的递归调用,而不会引发异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-30 14:05:50

C#和C++中堆栈溢出最显著的区别是: C++没有“堆栈溢出异常”(*)。使用C++溢出堆栈的结果只是未定义的行为。它可以做你希望它做的事情,但它也可能做一些完全不同的事情。如果运气好,程序就会崩溃(因为在堆栈末尾分配了受保护的页面而导致分段冲突),如果您运气不好,直到某个时候尝试访问现在覆盖的内存,堆栈溢出才会被检测到。

其他可能被考虑到递归调用的事情:

  1. 可用的堆栈大小可能不同。
  2. 使用的堆栈帧的大小可能有所不同。
  3. 尾递归优化可以在一种情况下进行,而不能在另一种情况下进行。
  4. 有些系统能够动态地增加它们的堆栈(“拆分堆栈”)。

(*)由于行为未定义,一些实现可能定义堆栈溢出异常,并在适当的条件下抛出该异常;然而,没有这样的保证。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37527350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档