Это не до ОС, чтобы решить, что это работа программиста. Взяв Windows в качестве примера, размер стека начинается с потока, который запускается ОС, указан в заголовке исполняемого файла. Размер IMAGE_OPTIONAL_HEADER.SizeOfStackReserve. Что передает доллар любому инструменту, сгенерированному заголовком, как компоновщик, вы используете его /STACK option для установки размера.
Большинство инструментов сборки будут использовать разумный размер по умолчанию, один мегабайт для размера резерва очень распространен, 4096 (одна страница) для начального размера фиксации. Или не столь разумные дефолты, программы .NET печально совершают все пространство стека впереди.
Это также необходимо указать при запуске потока, функция winapi, такая как CreateThread, принимает аргумент для установки размера. По умолчанию доступно, если вы укажете 0, то ОС использует размер, указанный в заголовке EXE. Это очень часто, фактический размер редко критичен, поскольку большинство программ сильно увеличивают размер стека. Важно оставаться вдали от катастрофы. Обратите внимание, что превышение размера стека не стоит ничего в операционной системе с запросами, вы платите только за то, что используете.
Запуск из пространства стека является неустранимой ошибкой во многих случаях, процессор больше не может звонить. Причина этого имени веб-сайта. То, что есть другие потоки вокруг, которые не потребляют весь их стек, не имеет значения, коммутационные стеки вообще не могут работать. Программы используют указатели для стека пространства, вы не можете найти их для обновления значения.
Что происходит, когда нить исчерпывает свой стек? Ответ выше вашего вопроса. –
Но что, если в пространстве адресов процесса было много недоиспользуемого пространства другими потоками, все равно это приведет к переполнению стека? – amiageek
Да. Стек каждого потока является отдельным и независимым от других стеков потоков. Смешение их в целом было бы очень плохой идеей. –