LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

Только непонятно, зачем там предлагают и сверху, и снизу по странице. Стек-то ведь в одну сторону растет.

стек в интеле растет в сторону младших адресов(пуш декрементирует стекпоинтер), а массив растет в сторону старших(больший индекс больший адрес).

то есть если ты ушел в бесконечную рекурсию, ты нарвешься на страницу, что лежит у самых младших адресов стека(адрес будет уменьшаться), а если станешь расписывать локальный массив(адрес будет увеличиваться) - упрешься в страницу, что лежит в старших адресах.

зы. включи все варнинги типа -Wall, и билди. посмотри всякие полученные варнинги на преобразованиях типов. особенно когда короткий тип принудительно преобразуют к длинному, берут адрес и отдают какой-то функции. тогда функция считая, что там длинный тип, пишет в физически короткий и расписывает стек. также опасен варнинг - нет возврата резульата из функции что должна его возвращать(его надо делать ошибкой, а не варнингом вообще-то). тут система может себя чудесно вести. Также могут быть опасны хардкорные преобразования типов (type)value, я правда про С++ говорю. их лучше менять на статик и прочие касты.

вообщем все сильно похоже на попорченный стек.

Исходная версия alysnix, :

Только непонятно, зачем там предлагают и сверху, и снизу по странице. Стек-то ведь в одну сторону растет.

стек в интеле растет в сторону младших адресов(пуш декрементирует стекпоинтер), а массив растет в сторону старших(больший индекс больший адрес).

то есть если ты ушел в бесконечную рекурсию, ты нарвешься на страницу, что лежит у самых младших адресов стека(адрес будет уменьшаться), а если станешь расписывать локальный массив(адрес будет увеличиваться) - упрешься в страницу, что лежит в старших адресах.