Максимальный размер стека многопоточного процесса - PullRequest
2 голосов
/ 11 мая 2019

Согласно моему пониманию

  1. каждый поток процесса получает стек, в то время как для процесса обычно есть только одна куча.
  2. Существует максимальный размер стека по умолчаниюпредел, установленный ОС.

    1. Бит Windows-64: 1 МБ
    2. Бит Linux-64: 8 МБ

Является ли этот пределприменимо на уровне процесса или каждый поток может иметь стек 1 МБ / 8 МБ?

А что происходит с памятью, выделенной для стека после выхода из потока?

Ответы [ 2 ]

2 голосов
/ 11 мая 2019

каждый поток процесса получает стек, в то время как обычно одна куча для процесса.

Это верно.

Применимо ли это ограничение на уровне процесса или каждый поток может иметь Стек 1 МБ / 8 МБ?

Каждый поток получает свой собственный стек; ограничение размера стека для каждого потока (т. е. это не общее ограничение для всех потоков в процессе)

А что происходит с памятью, выделенной для стека после выхода из потока?

Страницы памяти освобождаются и становятся доступными для использования другим кодом в будущем.

0 голосов
/ 11 мая 2019

каждый поток процесса получает стек, в то время как для процесса обычно есть только одна куча.

Первый вариант верен.Последнее неверно.Процессы часто имеют несколько куч, особенно при соединении в стороннем коде.

Применимо ли это ограничение на уровне процесса или каждый поток может иметь стек 1 МБ / 8 МБ?

Perthread.

А что происходит с памятью, выделенной для стека после выхода из потока?

Обычно они остаются выделенными процессу до тех пор, пока процесс не выйдет и адресное пространство не будетдольше существует.

...