The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Почему падают программы при жестком ограничении размера стека (memory malloc stack debug)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: memory, malloc, stack, debug,  (найти похожие документы)
Date: Sun, 21 Apr 2002 21:30:27 +0000 (UTC) From: "Valeriy E. Ushakov" <uwe@ptc.spbu.ru> Newsgroups: fido7.ru.unix.bsd Subject: Почему падают программы при жестком ограничении размера стека > VEU> А как проверить, что ты в stack limit уперся? Программа честно > VEU> двигает sp, и думает, что у нее есть N байт на фрейм, хотя их у нее > VEU> всего лишь до конца последней страницы, а больше не дадут. > > RETURN VALUES > The malloc() and calloc() functions return a pointer to the allocated > space if successful; otherwise, a null pointer is returned and errno is > set to ENOMEM. Программа имеет, скажем, 512К лимит на размер стека. Программа выжрала, ну скажем, 511K. Она вызывает функцию, которой под локальные переменные надо, ну пусть, 2К. Пролог функции создает новый call frame, передвинув %sp/%fp, код функции обращается к переменнным по смещениям от регистра. Обращается к одной переменной, которая ниже 512К - все ок. Обращается к другой переменной, которая вылезает за эти 512К на следующую страницу... оппаньки, стек уперся в лимит, новой страницы ядро под стек не дает. Программа умирает. Реальный пример - сборка clisp на NetBSD/sparc дохнет в bootstrap'е именно по этой причине. Кстати, вот где был неправ - так в непоквоченной тобой гипотезе про malloc - там sbrk(), упершись в лимит, обломится с ENOMEM. Но malloc, явно просит себе новый кусок арены и может проверить код возврата. А вот стек функции дается программе ядром автомагически, явочным, так сказать порядком.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру