是线程或进程引起stackoverflow错误

时间:2020-10-23 12:56:00

标签: multithreading process stack-overflow

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

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

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

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

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

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

相关问题