Для однопоточной программы я хочу проверить, находится ли данный виртуальный адрес в стеке процессов. Я хочу сделать это внутри процесса, который написан на C.
Я думаю о чтении /proc/self/maps
, чтобы найти строку с надписью [stack], чтобы получить начальный и конечный адрес для моего стека процессов. Размышление об этом решении привело меня к следующим вопросам:
-
/proc/self/maps
показывает стек из 132k для моего конкретного процесса, а максимальный размер для стека (ulimit -s) - 8 мегабайт в моей системе. Как Linux знает, что ошибка данного страницы возникает из-за того, что мы выше предела стека, принадлежит стек (и что стек должен быть увеличен), а не то, что мы достигаем другой области памяти процесса? -
Ли Linux сокращает стек? Другими словами, например, при возврате из вызовов глубоких функций ОС уменьшает область виртуальной памяти, соответствующую стеку?
-
Сколько виртуального пространства первоначально выделено для стека операционной системой?
-
Является ли мое решение правильным и есть ли другой более чистый способ сделать это?