Это стало возможным благодаря стека (особенно на Intel-системах). Предположим, что у нас есть метод caller
, который включает, скажем, int
, что он хранится локально.
Когда caller(
звонит target(
, что int должен быть сохранен. Он помещается в стек, а также адрес, из которого сделан вызов. target(
может выполнять свою логику, создавать свои собственные локальные переменные и вызывать другие методы. Его локальные переменные будут помещены в стек вместе с адресом вызова.
Когда target(
заканчивается, стек «разворачивается».Удаляется верхняя часть стека, содержащая локальные переменные target(
.
Когда методы рекурсируют слишком далеко, стек может стать слишком большим, и может произойти переполнение стека.
Вы должны прочитать [это] (http://en.wikipedia.org/wiki/Call_stack#Structure) Это очень хороший ответ: [Глава 11 - Процедуры] (http: //pages.cs.wisc. edu/~ smoler/x86text/lect.notes/procedure.html) И если вам нравится Видео: [Сборочный праймер для хакеров (часть 11) Стеки функций] (http://www.progamercity.net/code-tut/168- assembly-language-primer-hackers-video-series.html) вам понравятся все видео здесь. –