Размещение объектов переменной длины с использованием множества стеков
Теперь рассмотрим возможность преодоления этих трудностей за счёт программного стека.
Представим себе цепочку вызовов: функция f1 вызывает вложенную функцию f2, которая,
в свою очередь, вызывает вложенную f3 и т.д.
Для каждого уровня вложенности можно сделать свой программный стек.
Вызывающая функция записывает параметры для вызываемой в стек этой функции.
Вызванная функция использует свой стек по своему усмотрению: размещает там, к примеру, локальные объекты.
Результат своей работы вызванная программа записывает не в свой стек, а в стек той функции, которая её вызвала.
Схематически это можно изобразить так (для простоты опустим пока что вопросы хранения адреса возврата и значения регистров;
но к этому ещё вернёмся):
Если в программе допустимы вызовы функций 256 уровней вложенности, то в памяти надо выделить 256 стеков.
Но разбить память на большое количество кусков – это не самая хорошая идея. Можно ли обойтись меньшим числом?
Допустим, двумя стеками, потому что недостаточность одного стека мы только что рассмотрели.
Читаем далее следующую статью:
Размещение объектов переменной длины с использованием двух стеков.
Почитайте ещё:
Последняя правка: 2016-03-18 09:44
Написать отзыв
Написать автору можно на электронную почту mail(аt)compiler.su
|