На этот вопрос не будет единого ответа.
На самом деле, в Windows нет ни одного ответа. Различные исполняемые файлы определяют разные ограничения стека. И даже в рамках одного процесса отдельные потоки могут иметь разные ограничения стека.
И это становится еще сложнее, если учесть различия между .net и нативными исполняемыми файлами. Довольно странно, что исполняемые файлы .net фиксируют выделение всего стека для каждого потока, как только поток запускается. С другой стороны, собственные исполняемые файлы резервируют выделение стека, а затем фиксируют память по требованию, используя защитные страницы.