Сколько пространства стека обычно зарезервировано для потока? (POSIX/OSX)

54
6

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

push rax

который поместит значение в стек и rsp. Но что, если я никогда не буду использовать push? Я предполагаю, что какое-то место по-прежнему распределяется, но сколько? Кроме того, это фиксированная сумма или же она растет динамически с количеством вещей push изд?

спросил(а) 2014-05-12T15:23:00+04:00 6 лет назад
1
Решение
83

POSIX не определяет какие-либо стандарты в отношении размера стека, он полностью зависит от реализации. Поскольку вы отметили этот OSX, по умолчанию выделяются:

    Основная тема (8MB) Вторичная тема (512kB)

Естественно, они могут быть настроены в соответствии с вашими потребностями. Распределение динамическое:

Минимальный допустимый размер стека для вторичных потоков составляет 16 КБ, а размер стека должен быть кратным 4 КБ. Пространство для этой памяти зарезервировано в пространстве процесса при создании потока, но фактические страницы, связанные с этой памятью, не создаются до тех пор, пока они не понадобятся.

Здесь слишком много деталей. Предлагаю вам прочитать:

Управление потоками (Mac Developer Library)

ответил(а) 2014-05-12T15:38:00+04:00 6 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема