Nic*_*yer 130

堆栈溢出特指执行堆栈超​​出为其保留的内存的情况.例如,如果调用一个递归调用自身而没有终止的函数,则会导致堆栈溢出,因为每个函数调用都会创建一个新的堆栈帧,并且堆栈最终将消耗比为其保留的内存更多的内存.

缓冲区溢出是指程序写入超出为任何缓冲区分配的内存末尾(包括在堆上,而不仅仅在堆栈上)的任何情况.例如,如果您写入从堆分配的数组的末尾,则会导致缓冲区溢出.

  • 那么说堆栈溢出是一种特定类型的缓冲区溢出是否公平?(我认为堆栈是运行时分配的内存的一部分) (3认同)
  • 术语“堆栈溢出”通常用于描述发生在堆栈上的缓冲区溢出。 (2认同)

Cra*_*aig 18

关键的区别在于知道堆栈和缓冲区之间的区别.

堆栈是为执行程序执行而保留的空间.当您调用函数时,它的参数和返回信息将被放置在堆栈中.

缓冲区是用于单一目的的通用内存块.例如,字符串是缓冲区.它可以通过向字符串写入比分配的更多数据而过度运行.


Chr*_*nce 11

堆栈溢出:你已经在堆栈上为分配给当前线程的内存放了太多东西

缓冲区溢出:您已超出当前分配的缓冲区的大小,并且未调整大小以适应(或无法进一步调整大小).


Dan*_*olt 10

你可能想知道的不仅仅是:

堆栈溢出

缓冲区溢出


Jar*_*Par 5

stackoverflow是指线程堆栈的大小超过该线程的最大允许堆栈大小.

缓冲区溢出是指将值写入当前未由程序分配的内存中.