我对线程和进程的概念感到困惑。我有一些基本问题。
我知道该进程将内存分配给线程。线程会占用所有进程内存吗?例如,一个进程有1GB的堆栈内存,并且有两个线程,那么每个线程都有512MB的堆栈内存?
另一个问题是我运行一个程序并遇到堆栈溢出错误。是由“一个”线程还是由进程引起的?如果某个线程导致堆栈溢出,它将“使用”另一个线程的堆栈内存还是仅仅给出错误。
谢谢
答案 0 :(得分:0)
线程会占用所有进程内存吗?
同一进程的线程共享该进程的virtual address space。每个线程在进程的虚拟地址空间中都有自己的堆栈区。在Linux上,默认情况下,每个线程的堆栈可以增长到8MB。
另一个问题是我运行一个程序并遇到堆栈溢出错误。是由“一个”线程还是由进程引起的?
是的。第一次堆栈溢出将终止整个过程。从理论上讲,所有线程都可以同时导致自己的堆栈溢出,但是这些事件将在内核中序列化,第一个事件将终止进程。