Linux线程和进程

时间:2014-08-26 23:14:27

标签: c linux multithreading

我有一个关于Linux线程和进程的简单问题。

Linux中的进程有一个单独的虚拟地址空间,由

组成
- stack
- heap
- bss
- code/text
- data

进程内部可以有'n'个线程。我知道它们共享进程的地址空间。但是由于不同线程执行的函数调用可能不同,所以线程是否有单独的堆栈段?

2 个答案:

答案 0 :(得分:2)

  1. 线程共享所有内存段,包括堆栈段。
  2. 每个帖子都有一个单独的堆栈。
  3. 两者都是真的。我知道他们听起来很矛盾。

    第一个线程的堆栈使用所谓的“堆栈段”。它由内核分配。

    # cat /proc/self/maps
    ...
    7fffbe0b0000-7fffbe0d1000 rw-p 00000000 00:00 0                          [stack]
    ...
    

    稍后创建的线程(例如由pthread_create()或clone(CLONE_VM)创建)使用堆(或私有匿名mmap,它在各方面与堆相同)作为其堆栈。它由用户程序分配并传递给clone()。

    简而言之,每个线程都使用一个单独的堆栈。所有线程都可以读/写每个其他线程的堆栈。

答案 1 :(得分:1)

是的,在POSIX threading模型下,每个线程都有自己的堆栈。