Есть ли способ избежать модели Win32 "один большой стек", не нанося вред SEH? Я хотел бы иметь возможность размещать кадры стека в куче, как способ реализации сопрограмм. Тем не менее, мой код в настоящее время зависит от SEH, и эта статья , несколько страниц внизу, говорит (касаясь обхода обработчиков исключений, сканирования, выделение моего):
ОС довольно параноидально относится к поврежденным стекам во время этого обхода цепочки. Он проверяет, что все элементы цепочки в пределах стека . (Эти границы также записаны в TEB). ОС также проверяет, что все записи в стеке находятся в порядке возрастания . Если вы нарушите эти правила, ОС сочтет стек поврежденным и не сможет обрабатывать исключения. Это одна из причин того, что приложение Win32 не может разбить свой стек на несколько непересекающихся сегментов, как инновационный метод борьбы с переполнением стека.
Таким образом, в основном, если возникает исключение, когда текущий кадр стека находится за пределами «одного большого стека», процесс немедленно завершается. Не идеальное поведение.
Кто-нибудь смог обойти эту проблему и использовать SEH с непересекающимся стеком в собственном приложении Win32? Кроме того, есть ли другие специфичные для Win32 "ошибки" с непересекающимися стеками?