@ Employerrussian
There is no such thing: all the threads share the entire address space, so the stack
doesn't "belong exclusively" to any given thread. In fact, you can take an address of a
local variable, and pass that address to a different thread, which can then read or write
values to it.
What I believe you are asking is "how to tell which memory region in /proc/<pid>/maps is
thread X currently using as its stack?". If that's the question, you can print $sp to
find out current stack pointer for the thread you are interested in, and then find a
region in /proc/<pid>/maps that overlaps $sp.
Правильно, они разделяют все адресное пространство, и также верно, что потоки имеют свой собственный стек, но все же это не объясняет, как стек потока отличается от стека другого потока или потока процесса. Я имею в виду, если это способ, которым мы можем это визуализировать:
+--------+ stack vma start
| +--+ |
| +--+ <------- stack of process
| +--+ |
| +--+ |
| : : |
| |
| |
| +--+ |
| +--+ <------- stack of thread1
| +--+ |
| +--+ |
| : : |
| |
| |
| +--+ |
| +--+ |
| +--+ <------ stack of thread2
| +--+ |
| : : |
: :
: :
+--------+ stack vma end
(может быть, я совершенно неправ в этом, но это просто попытка прояснить ситуацию)
Что касается передачи адреса (локальной переменной), когда вы передаете его как адрес, вы можете читать или записывать в эту ячейку памяти, это присущее свойство с указателем.