首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆栈溢出与堆栈崩溃

堆栈溢出与堆栈崩溃
EN

Stack Overflow用户
提问于 2014-11-04 10:57:22
回答 2查看 2.8K关注 0票数 0

堆栈溢出流和堆栈崩溃之间有什么区别?何时发生堆栈崩溃?什么是堆超过流和堆崩溃。当堆栈超过流/堆超过流时会发生什么?

EN

回答 2

Stack Overflow用户

发布于 2014-11-04 11:16:45

堆栈溢出是在此广泛讨论,当没有足够的堆栈内存和其他数据被覆盖时,意味着溢出条件,导致未定义的行为。

“堆栈崩溃”可能是第一个的同义词,尽管我听说过它(或者堆栈损坏),主要是在调试环境中,它指示堆栈指针何时损坏,导致所有调试堆栈相关的视图停止运行(很明显,调试也是如此)。

堆溢出通常不会发生,除非是在一些内存池管理的情况下,因为假设操作系统做得很好,就永远无法通过将其标记为可写来覆盖已使用的内存块。如果堆内存耗尽,系统可能会告诉您这一点,然后失败。

堆崩溃可以定义为堆内存的无效使用,例如访问冲突或访问无效地址。它应该属于内存损坏存储违规这两个更广泛的术语(这些术语可能与堆栈溢出有关)。

不知道您在哪里听说过这些术语,特别是“堆栈崩溃”,但我不会使用它来避免混淆。

票数 2
EN

Stack Overflow用户

发布于 2014-11-04 11:36:08

我从没听说过Stack crash

通常,内存访问有两种错误:

  1. 您违反了一些内存保护(试图写入只读部分或访问不可读的内存)
  2. 您访问的内存是正确的,但以不好的方式

当程序有意或无意地溢出堆栈内容时,通常使用堆栈溢出式。这很像案例(2)。

当您的溢出堆栈时,它也被使用,例如,通过交织到许多函数调用。这很像案例(1)。例如,在本例中,Java为您提供了一个StackOverflow异常。

堆也有这两种情况。缓冲区溢出是以不好的方式访问内存和破坏堆中数据(如果缓冲区在堆中)的一个例子。在这种情况下,我们可以说它是一个堆溢出

您还可以尝试访问当前未分配的进程堆区域中的一些内存。这将导致您根据虚拟内存层的不同场景。有时,您可以使用内存,但由于以前没有分配内存,因此会导致未来的内存损坏(出现时没有报告,很难追溯)。有时,虚拟内存层将能够检测您的访问冲突,并中止您的进程(Unix可以将其报告为Bus errorSegmentation fault)。

还可以通过分配过多的内存来占用所有的堆空间。这是一个堆耗尽,一种堆溢出.

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

https://stackoverflow.com/questions/26733412

复制
相关文章

相似问题

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