多线程进程的最大堆栈大小

时间:2019-05-11 05:39:45

标签: c multithreading memory-management virtual-memory memory-layout

根据我的理解

  1. 一个进程的每个线程都获得一个堆栈,而该进程通常只有一个堆。
  2. 操作系统设置了默认的堆栈最大大小限制。

    1. Windows-64位:1MB
    2. Linux-64位:8MB

此限制适用于进程级别还是每个线程可以具有1MB / 8MB堆栈?

线程退出后分配给堆栈的内存又会如何?

2 个答案:

答案 0 :(得分:2)

  

一个进程的每个线程都获得一个堆栈,而通常只有一个   一堆用于处理。

是的。

  

此限制适用于进程级别还是每个线程可以具有   1MB / 8MB堆栈?

每个线程都有自己的堆栈;堆栈大小限制是按线程的(即,它不是进程中所有线程的共享限制)

  

线程退出后分配给堆栈的内存又会如何?

释放内存页,以后可以供其他代码使用。

答案 1 :(得分:0)

  

一个进程的每个线程都获得一个堆栈,而该进程通常只有一个堆。

前者是真的。后者是错误的。进程通常具有多个堆,尤其是在链接3d参与者代码时。

  

此限制适用于进程级别还是每个线程可以具有1MB / 8MB堆栈?

每个线程。

  

线程退出后分配给堆栈的内存又会如何?

通常,它们将一直分配给进程,直到进程退出并且地址空间不再存在。