Los hilos comparten todo [1]. Hay un espacio de direcciones para todo el proceso.
Cada hilo tiene su propia pila y registros, pero todas las pilas de hilos son visibles en el espacio de direcciones compartido.
Si un subproceso asigna algún objeto en su pila y envía la dirección a otro subproceso, ambos tendrán igual acceso a ese objeto.
En realidad, acabo de notar un problema más amplio: creo que estás confundiendo dos usos del segmento de palabras .
El formato de archivo para un ejecutable (p. Ej., ELF) tiene distintas secciones, que pueden denominarse segmentos, que contienen código compilado (texto), datos inicializados, símbolos de enlace, información de depuración, etc. No hay segmentos de montón o pila. aquí, ya que esas son construcciones de tiempo de ejecución solamente.
Estos segmentos de archivo binario se pueden asignar al espacio de direcciones del proceso por separado, con diferentes permisos (por ejemplo, ejecutable de solo lectura para código / texto, y no ejecutable de copia en escritura para datos inicializados).
Las áreas de este espacio de direcciones se usan para diferentes propósitos, como la asignación del montón y las pilas de subprocesos, por convención (aplicada por las bibliotecas de tiempo de ejecución de idioma). Sin embargo, todo es solo memoria, y probablemente no esté segmentado a menos que esté ejecutando en modo virtual 8086. La pila de cada subproceso es una porción de memoria asignada en el momento de la creación del subproceso, con la dirección superior de la pila actual almacenada en un registro de puntero de la pila, y cada subproceso mantiene su propio puntero de la pila junto con sus otros registros.
[1] OK, lo sé: máscaras de señal, TSS / TSD, etc. Sin embargo, el espacio de direcciones, incluidos todos sus segmentos de programa asignados, aún se comparten.