是线程或进程引起stackoverflow错误

问题描述

我对线程和进程的概念感到困惑。我有一些基本问题。

我知道该进程将内存分配给线程。线程会占用所有进程内存吗?例如,一个进程有1GB的堆栈内存,并且有两个线程,那么每个线程都有512MB的堆栈内存?

另一个问题是我运行一个程序并遇到堆栈溢出错误。是由“一个”线程还是由进程引起的?如果某个线程导致堆栈溢出,它将“使用”另一个线程的堆栈内存还是仅仅给出错误。

谢谢

解决方法

线程会占用所有进程内存吗?

同一进程的线程共享该进程的virtual address space。每个线程在进程的虚拟地址空间中都有自己的堆栈区。在Linux上,默认情况下,每个线程的堆栈可以增长到8MB。

另一个问题是我运行一个程序并遇到堆栈溢出错误。是由“一个”线程还是由进程引起的?

是的。第一次堆栈溢出将终止整个过程。从理论上讲,所有线程都可以同时导致自己的堆栈溢出,但是这些事件将在内核中序列化,第一个事件将终止进程。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...