Системный вызов clone() в Linux принимает параметр, указывающий на стек для нового созданного потока. Очевидным способом сделать это является просто malloc некоторое пространство и передать это, но тогда вы должны быть уверены, что malloc'd столько же пространства стека, сколько этот поток будет использовать (трудно предсказать).
Я помнил, что при использовании pthreads мне не пришлось это делать, поэтому мне было любопытно, что он сделал. Я наткнулся на этот сайт, который объясняет: "Лучшим решением, используемым реализацией Linux pthreads, является использование mmap для выделения памяти с указанием флагов область памяти, которая выделяется при ее использовании. Таким образом, память выделяется для стека по мере необходимости, а нарушение сегментации будет происходить, если система не может выделить дополнительную память."
Единственный контекст, который я когда-либо слышал в mmap, используется для сопоставления файлов в памяти и, действительно, считывания man-страницы mmap требуется дескриптор файла. Как это можно использовать для выделения стека динамической длины для предоставления clone()? Этот сайт просто сумасшедший?;)
В любом случае, не нужно ли ядро знать, как найти свободную связку памяти для нового стека, так как это что-то нужно делать все время, когда пользователь запускает новые процессы? Почему указатель стека даже нужно указывать в первую очередь, если ядро уже может это понять?