Сколько помещается в 32-разрядный стек под Windows x86-64, за исключением?

В этомэтот вопросЯ приведу некоторые сведения о параллельном языке, который я реализовал. Компилятор генерирует собственный код x86-32.

Ключевым решением реализации является выделение стекового пространства из кучи для каждой функции (вызова). Это позволяет выполнять рекурсию до тех пор, пока у вас не закончится ВМ, и включает стек кактусов для лексических областей даже для вложенных параллельных потомков и т. Д.

Генератор кода компилятора может вычислить, сколько стекового пространства требуется самой функции; это грязно, но просто, и это уже хорошо. Нет проблем с требованиями стека от вызовов ОС; мои функции не выполняются (если это необходимо, код переключается на стандартный «большой стек», выполняет системные вызовы, а затем переключается обратно). Чтобы быть безопасным перед лицом исключений и асинхронных вызовов, он добавляет вопиющую константу, в настоящее время около 500 байтов, в пространство стека, необходимое для функции, предназначенной для полного сохранения контекста x86-32, откалиброванного на основе опыта Windows 32.

Этот язык и обработка асинхронных исключений прекрасно работают в системах x86-32. Иногда возникают проблемы с запуском этой 32-битной реализации в системах x86-64. Я подозреваю, переполнение стека на исключение.

Вопрос состоит в том, сколько Windows может поместить в стек для аппаратного исключения (деления на ноль) или вызова StopThread при запуске моей 32-битной реализации на Windows 64 box? Я нервничаю, что Windows выдвигает полный контекст x86-64, который намного больше, чем контекст x86-32. Кто-нибудь знает? Есть ли документ, который отвечает этой главе и стиху?

Я готов провести несколько динамических экспериментов, чтобы увидеть.

Ответы на вопрос(2)

Ваш ответ на вопрос