Потребляемая дополнительная физическая память будет фактически вообще отсутствовать.До тех пор, пока поток не заработает, операционная система не будет тратить физическую память, хранящую свой стек или связанные структуры.(Конечно, он, вероятно, будет потреблять некоторую физическую память, потому что он создаст начальный стек. Но это можно и будет выгружать без ущерба для производительности, если поток не работает.)
Однако стек потока будет использовать виртуальную память.Вы можете настроить максимальный размер стека потока, и это максимальный размер стека, который контролирует, сколько виртуальной памяти используется.Если поток просто сидит там, это эффективно бесплатно.Он учитывает ограничения виртуальной памяти, даже если он не потребляет реальных ограниченных ресурсов.
Если вы сталкиваетесь с ошибками из-за нехватки виртуальной памяти из стеков потоков, вероятно, лучшим вариантом является увеличение лимита виртуальной памяти.Целью ограничения виртуальной памяти является косвенное ограничение использования физической памяти - использование физической памяти не будет превышать использование виртуальной памяти.Но если вы используете шаблоны программирования (например, множество потоков), которые потребляют виртуальную память без соответствующего использования физической памяти, ограничения просто вступают в силу, когда они не должны.
Конечно, 32-разрядный процесс принципиальноограничено 2 ГБ, 3 ГБ или 4 ГБ виртуальной памяти (в зависимости от платформы).Таким образом, у вас может не быть иного выбора, кроме как уменьшить максимальный размер стека потоков.(Поток немедленно потребляет виртуальную память, равную его максимальному размеру стека, поскольку адресное пространство должно быть зарезервировано, даже если оно никогда не используется.)
Также возможно уменьшение максимального размера стека потока.Это компромисс, хотя.Больший максимум предотвращает возникновение исключения для потока, если ему требуется много стека в течение всего срока его службы.И единственным потребляемым ресурсом является адресное пространство, которое обычно дешево.Но единственное практическое ограничение, которое вы можете наложить на программу, чтобы не допустить ее нехватки физической памяти и плохой работы, - это ограничение виртуальной памяти.Так что ручка, которую вы действительно хотите, не существует.