Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Раскручиванием программного стека называется процесс удаления
Из него значений, в результате которого уничтожаются стековые Фреймы вызванных функций. Увеличение программного стека происходит в направлении уменьшения Адресов выделенной физической памяти компьютера. Код программы, Напротив, размещается в младших адресах. Далее следует область данных, где Размещаются внешние и статические переменные и константы, а затем динамически распределяемая память («куча»). При использовании больших Локальных массивов данных или при значительной глубине рекурсии возможно Переполнение стека, т.е. разрастание его до других разделов памяти. Рассмотрим схематический программный код и изменение стека в Процессе его выполнения. void func2() { int i=256; } void func1() { int k=128; // Когда поток управления достигает // этого места, то, двигаясь вглубь стека, // увидим локальную переменную k, // фрейм функции func1(), адрес возврата // в main(), переменную j Func2(); } void main(void){ int j=64; Func1(); } void func2() { int i=256; } void func1() { int k=128; Func2(); } void main(void){ int j=64; // Когда поток управления // достигает этого места, в стеке // размещена переменная j Func1(); } Вершина Стека Младшие адреса памяти • Код программы • Статические данные • Куча j=64 Стек Старшие адреса памяти Вершина Стека Младшие адреса памяти • Код программы • Статические данные • Куча j=64 Адрес возврата в main() k=128 Фрейм для func1() Стек Старшие адреса памяти Имеется несколько механизмов раскручивания программного стека [2]: • естественное раскручивание в процессе выполнения программы; • раскручивание, связанное с обработкой исключительных ситуаций; • раскручивание путем применения функции longjmp(); • и, наконец, путем прямой модификации регистра указателя стека CPU Важно заметить, что в случае обработки исключений, как и при Естественном разматывании стека, удаление автоматических локальных Date: 2015-12-12; view: 501; Нарушение авторских прав |