Привет всем.
Помогите пожалуйста разобраться с терминами. В некоторых переводах встречаю их взаимозаменяемость.
stack overflow - переполнение стека.
stack exhaustion - исчерпание стека. Пример "An error exists in the function 'fnmatch' in the bundled version of PHP that can lead to stack exhaustion (CVE-2010-1917)"
Являются ли эти выражения синонимами ?
LinuxForum.Fans
Определение терминов
Автор: marikk
3 сообщений
893 просмотров
нет конечно.Являются ли эти выражения синонимами ?
На самом деле стек — структура данных, и она в принципе не может переполнится. Однако реализован стек в x86 в виде простого массива, и максимальный размер стека ограничен. Потому стек можно переполнить.
Вот пример переполнения машинного стека:
text
int foo(int a)
{
return foo(a+1);
}
int main()
{
return foo(1);
}
(у меня пишет "ошибка сегментирования", по стандарту это UB).
Исчерпание стека — это когда вы засунули в стек 4 эл-та, и пытаетесь вынуть пять. Для x86го стека это тоже UB по стандарту, а в реальности ничего страшного не происходит(конечно я не гарантирую, UB оно такое), а просто выводится мусор.
PS: СТРАШНОЕ происходит ПОСЛЕ исчерпания, когда указатель стека уменьшается за пределы, и во время pop просто получается "мусор", а во время push вы в этот "мусор" что-то пишете, что приводит к краху (в лучшем случае).
Спасибо за помощь.
Войдите или зарегистрируйтесь, чтобы ответить.