Сохраняясь торжествами нового дизайна логотипа Stackoverflow, мне было любопытно, что должно было быть в точке sstk()
в BSD и других UNIX-подобных операционных системах?Пример использования несуществующего системного вызова sstk()?
По интерфейсу ядра системы страниц руководств Linux вызовов, sstk(2)
должен был:
... [изменить] размер области стека. Область стека также автоматически расширяется по мере необходимости. В VAX область текста и данных смежна в области P0, а секция стека находится в области P1 и растет вниз.
Однако, также в соответствии с инструкцией:
Этот вызов не поддерживается в 4.3BSD или 4.4BSD или Glibc или Linux или любой другой известной Unix-подобной системе. Некоторые системы имеют подпрограмму этого имени, которая возвращает ENOSYS.
Что можно заметить при просмотре glibc's sstk.c source
Мой вопрос, почему бы один хотите вручную изменить размер стека? sbrk() и друзья имеют смысл, но есть ли необходимость в ручном перераспределении стека размера в вашей программе вручную?
Тот факт, что вызов не поддерживается никому неизвестным, предлагает, что на самом деле его не так много, по крайней мере, нет. Я бы предположил, что это имело больше смысла в те дни, когда оперативная память была драгоценна. В те дни вам также, возможно, не удавалось полагаться на размер стека, который автоматически увеличивается. Таким образом, вы можете, скажем, увеличить стек динамически в рамках глубоко рекурсивного алгоритма, а затем свернуть его обратно. –
"* В соответствии с API ядра ядра Linux manpages ... *", которые man-страницы ядра?) – alk
@JohnBollinger: Просто сделайте это ответом. – alk