何时发生栈内存溢出?
对于一台服务器而言,每一个用户请求,都会产生一个线程来处理这个请求,每一个线程对应着一个栈,栈会分配内存,此时如果请求过多,这时候内存不够了,就会发生栈内存溢出。
什么时候会发生栈溢出?
栈溢出是指不断的调用方法,不断的压栈,最终超出了栈允许的栈深度,就会发生栈溢出,比如递归操作没有终止,死循环。
帮助记忆:
可以把内存比作是一个大箱子,栈是一个小箱子,栈溢出是指小箱子装不下了;而栈内存溢出是大箱子在也装不下小箱子了。
内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
内存溢出(out of memory)是指程序在申请内存时,没有足够的内存空间供其使用。内存泄漏最终会导致内存溢出。
内存越界是指向系统申请一块内存后,使用时超出申请范围。
缓冲区溢出是指向缓冲区内填充数据时超过了缓冲区本身的容量,而导致数据溢出并覆盖了其他内存空间的数据。
栈溢出是缓冲区溢出的一种,原理也相同。分为上溢出和下溢出。其中,上溢出是指栈满而又向其增加新的数据,导致数据溢出;下溢出是指空栈而又进行删除操作等,导致空间溢出。