Перебрасывание стека похоже на перебрасывание кучи, но в стеке.
Вот, теперь это объяснено.
О, ты хочешь больше деталей?
Если вы эмулируете процессор, основанный на стеке, на процессоре, который не работает, вы перебираете стек.
Если ваш код на C malloc и free содержит все остальные строки кода, значит, вы теряете кучу.
Смысл стека, возникающий из-за проблемы, заключается в том, что если вы профилируете свой код, процессор тратит почти все свое время, щелкая и толкаясь.
Для уничтожения кучи malloc () и free () являются вашими # 1 и # 2 наиболее часто используемыми функциями.
Теперь некоторые процессоры (Rockwell делают некоторые) фактически оптимизированы для работы на аппаратном языке, основанном на стеке.
- Внутренний ОЗУ, который кэширует верхние N килобайт стека внутри ЦП
- Несколько регистров
- стек всех инструкций относительно
Как ни странно, виртуальная машина Java представляет собой модель на основе стека.
Запуск действительно тупой реализации FORTH на оборудовании x86 приведет к перегрузке стека.
Подобные вещи вы можете написать после прочтения спецификации Forth, поэтому вы генерируете машинный код x86 для четвертых инструкций и НЕ оптимизируете его. Четвертое, ребята, я прошу прощения, я знаю, что ваши выводы намного лучше.
Postscript также основан на стеке, что делает ранние постскрипт-принтеры интересными: у них было ограниченное количество оперативной памяти и медленные процессоры: и использовался язык, разбивающий стеки. Я уверен, что много усилий было вложено в такие вещи, как оригинальный Apple Laserwriter, чтобы он работал лучше.
Он имел процессор Motorola 68000, работающий на (10ish) мегагерцах и 1 МБ оперативной памяти IIRC.
Опять стеки трэшер.
Это помогло?