Сколько страниц памяти используют компиляторы C в операционных системах для настольных ПК для обнаружения переполнения стека?

Этот вопрос связан с этим о массивах переменной длины в C99, но отличается от него.

] Ответы указывают на то, что одна опасность при размещении массивов переменной длины (или просто больших массивов фиксированного размера) в стеке заключается в том, что при выделении может произойти сбой незаметно, в отличие, скажем, от вызова malloc , который явно сообщает вызывающей стороне, успешно ли выполнено выделение.

Современные невстроенные платформы компиляции используют недопустимую зону памяти для обнаружения некоторых переполнений стека без дополнительных затрат (проверки - это только проверки, уже сделанные бесплатно MMU). t защитить на 100% от вышеуказанной проблемы, потому что очень большой локальный массив может привести к тому, что указатель стека перейдет за недопустимую область.

Кто-нибудь знает, сколько страниц обычно выделяется для этого обнаружения? минимум 4 КиБ, но могло быть и больше. по выбору компилятора или ОС, и в любом случае есть ли способ его изменить?

7
задан Community 23 May 2017 в 12:06
поделиться