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