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

C 多线程进程堆栈的最大大小,c,multithreading,memory-management,virtual-memory,memory-layout,C,Multithreading,Memory Management,Virtual Memory,Memory Layout,据我了解 进程的每个线程都有一个堆栈,而进程通常只有一个堆 操作系统设置了默认的堆栈最大大小限制 Windows-64位:1MB Linux-64位:8MB 该限制是否适用于进程级别,或者每个线程可以有1MB/8MB堆栈 线程退出后,分配给堆栈的内存会发生什么变化 进程的每个线程都会得到一个堆栈,而通常只有 进程的一个堆 没错 这个限制是否适用于进程级别,或者每个线程可以有 1MB/8MB堆栈 每个线程都有自己的堆栈;堆栈大小限制为每个线程(即,它不是进程中所有线程的共享限制) 线程退出后,分

据我了解

  • 进程的每个线程都有一个堆栈,而进程通常只有一个堆
  • 操作系统设置了默认的堆栈最大大小限制

  • Windows-64位:1MB
  • Linux-64位:8MB
  • 该限制是否适用于进程级别,或者每个线程可以有1MB/8MB堆栈

    线程退出后,分配给堆栈的内存会发生什么变化

    进程的每个线程都会得到一个堆栈,而通常只有 进程的一个堆

    没错

    这个限制是否适用于进程级别,或者每个线程可以有 1MB/8MB堆栈

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

    线程退出后,分配给堆栈的内存会发生什么变化

    内存页将被释放,并可供将来的其他代码使用

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

    前者是正确的。后者是错误的。进程通常有多个堆,尤其是在3d party代码中链接时

    该限制是否适用于进程级别,或者每个线程可以有1MB/8MB堆栈

    每个线程

    线程退出后,分配给堆栈的内存会发生什么变化


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

    “内存页将被释放,并可供将来的其他代码使用。在线程退出时,这仅对分离的线程和未连接的线程发生(至少对POSIX线程是默认的)当线程被连接时会发生这种情况。@alk线程的底层技术中没有分离或未连接的东西,分离/未连接的东西是C级别的。@MichaelChourdakis线程也没有堆栈-某些东西必须管理线程的堆栈。堆栈由管理分离/未连接的相同机制管理他。