Сколько пространства стека обычно зарезервировано для потока? (POSIX/OSX)
Ответ, вероятно, различается в зависимости от ОС, но мне любопытно, сколько стекового пространства делает поток, обычно предварительно распределяющий. Например, если я использую:
push rax
который поместит значение в стек и rsp
. Но что, если я никогда не буду использовать push
? Я предполагаю, что какое-то место по-прежнему распределяется, но сколько? Кроме того, это фиксированная сумма или же она растет динамически с количеством вещей push
изд?
POSIX не определяет какие-либо стандарты в отношении размера стека, он полностью зависит от реализации. Поскольку вы отметили этот OSX
, по умолчанию выделяются:
- Основная тема (8MB) Вторичная тема (512kB)
Естественно, они могут быть настроены в соответствии с вашими потребностями. Распределение динамическое:
Минимальный допустимый размер стека для вторичных потоков составляет 16 КБ, а размер стека должен быть кратным 4 КБ. Пространство для этой памяти зарезервировано в пространстве процесса при создании потока, но фактические страницы, связанные с этой памятью, не создаются до тех пор, пока они не понадобятся.
Здесь слишком много деталей. Предлагаю вам прочитать: