VAR W1, W2: PROC;
PROCEDURE Работа_1;
VAR A: INTEGER;... BEGIN... W2;...
END Работа_1;
PROCEDURE Работа_2;
VAR A: INTEGER;... BEGIN... W2;...
END Работа_2;
BEGIN... W1:=Работа_1;... W2:=Работа_2;... W1;...
В этом фрагменте описаны два активных объекта процедурного типа PROC = PROCEDURE(): W1 и W2 и две процедуры без параметров: Работа_1 и Работа_2, которые могут использоваться как константы типа PROC. Интерпретация (активизация) W1 приведет к вызову Работы_1 и созданию локальной среды (содержащей переменную А). В процессе выполнения Работы_1 производится активизация объекта W2 и соответственно создание локальной среды для Работы_2. В любой текущий момент времени в системе могут быть активны несколько объектов. (В этом примере активизация W1 приводит к активизации W2, затем они оба остаются в активном состоянии и затем теряют свою активность в обратной последовательности: сначала пассивируется W2, затем W1). Последовательность активации и пассивации связана с вложенностью вызовов процедур, соответственно управление автоматической памятью основывается на использовании стека - структуры, поддерживающей такую вложенность. Ниже для этого фрагмента приведена иллюстрация распределения автоматической памяти, существующего в течение совместной активности объектов W1 и W2.
┌─ ┌───────────────────┐ ─┐
│ │ Переменная А │ │
│ ├───────────────────┤ > Локальная среда
│ │ Адрес возврата │ │ для W1
Занятое прост- < ├───────────────────┤ ─┤
ранство │ │ Переменная А │ │
│ ├───────────────────┤ > Локальная среда
│ │ Адрес возврата │ │ для W2
Вершина ──> └─ │───────────────────┤ ─┤
стека │ │ │
автоматической │ │ │
памяти │ │ │ Свободное
│ │ > пространство
Пассивация │ │ │ памяти
│ ^ │ │ │
│ │ │ │ │
│ │ │ │ │
v │ └───────────────────┘ ─┘
Активация
При активации каждого нового объекта вершина стека "опускается вниз" на величину, определяемую размерами локальной среды этого объекта,- при его пассивации вершина стека "поднимается вверх". С использованием автоматической памяти связаны две основные проблемы: рекурсии и множественности ассоциаций.
Рекурсия - механизм, позволяющий объекту совершать самоактивац-ию. Например, по схеме:
W1-->W1 (прямая рекурсия)
или W1-->W2 ...-->W1 (косвенная рекурсия).
Прямая рекурсия связана с непосредственной повторной (вложенной) активацией, а косвенная - с опосредованной (причем число посредников в схеме W1-->...-->W1 может быть произвольным). Использование рекурсии напрямую связано с размерами рабочего пространства автоматической памяти. Использование рекурсивных активаций объектов, с одной стороны, позволяет иметь очень лаконичные и емкие по содержанию программы, с другой стороны, в рекурсивных схемах (особенно в косвенной рекурсии) возрастает вероятность появления трудно идентифицируемых ошибок.
Множественность ассоциаций заключается в том, что в классе автоматической памяти могут быть одновременно размещены несколько одноименных объектов, имеющих в общем случае различные значения и относящиеся к разным активностям одного и того же или опять-таки разных объектов. В приведенном примере существуют два одноименных объекта: переменная А, связанная (ассоциированная) с активностью W1, и переменная А, ассоциированная с активностью объекта W2. В соответствии с принципом стека система упpавления автоматической памятью всегда pассматpивает в качестве активной последнюю созданную ассоциацию (самую "ближнюю" к вершине стека автоматической памяти). Возникновение множественности ассоциаций обусловлено только использованием в прикладных программах одноименных переменных с различной областью действия (областью видимости). Если уж использование таких переменных и является необходимым (в чем всегда стоит усомниться), то при их интерпретации следует помнить о множественности ассоциаций.
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄А___Б___v_Г___ Д___q_U___ Г___m_╜___ ╛___h_╤___ ¤___e_└___ ╟___b_е__ ┬________ ____Z___________________@___ ____@____@_________ -___x_о___ ├___s_ч___ ■___n_Ф___ й___i_з__ │__d_└__ ╨____w"__ Ы"__Z_B#__ __________________________________B#__C#__t_j#__ k#__m_r#__ s#__f_а#__ б#____Ў#__ ў#__X_∙#__ ·#__Q_Н%__ w"__ Ы"_______Ї______Ї______Ї______Ї______Ї______Ї
Н%__О%__t_с&__ т&__m_='__ >'__f_P'__ Q'____0(__ 1(__X_3(__ 4(__Q_q(__ w"__ Ы"_______Ї______Ї______Ї______Ї______Ї______Ї
q(__(__v_к(__ ┤(__q_╗*__ ╩*__l_/+__ N+__g_S+__ T+__`_я+__ _,__[__,__ 5,__V__0__ __________________Ї____________________
_0__*0__v_51__ X1__q_Q9__ b9__n__;__ у;__k_O<__ T<__f_У<__ Я<__a_Y=__ v=__\_OA__ _______________________________________
OA___A__x_yA__ ИA__u_▒B__ ╛B__p_ЕC__ ЩC__k_▀C__ ьC__f_TD__ eD__a_УD__ жD__\_3J__ _______________________________________
3J__CJ__v_~J__ ЮJ__q_WK__ sK__l_ёL__ ўL__g_VN__ gN__b_hN__ iN____"O__ 2O__Z_+T__ _______________________________________
+T__;T__v_<T__q_╥U__ ╘U__l_┘X__ сX__g_╢\__ ╧\__b_Va__ ka__]_Ъb__ Ыb__V_3c__ +T__ ________
______________________________3c__5c__t_Уc__ Фc__m__f__ _f__f__g__ _g__a_▀g__ щg__^_ak__ ik__Y_jk__V_╪k__ +T__ ________________________
______
______
╪k__┘k__t_ l__ #l__o_/m__ 0m__h_╓p__ ·p__c_]q__ nq__a_Чq__ │q____├q__ Zr__]_░t__ Вu__Z_____7_7_7___________
___________
_Вu__pv__ zv__v_
w__ 1w__q_╫x__ яx__l_нy__ ├y__g_|z__ Иz__d_┼{__ ▄{__a_F~__ b~__^_BД__ __________________________________BД__DД__y_dД__ eД__w_ЭД__ ЯД__u_┴Д__ ├Д__s_уД__ фД__q__Е__ _Е__o_>Е__ @Е__m_`Е__ aЕ__k_ПЕ__ СЕ__i_____7_7_7_7_7_7_7_7_7_СЕ__ШЕ__ нЕ__y_├Е__ ┼Е__w_хЕ__ цЕ__u__Ж__ _Ж__s_ЭЗ__ ║З__n__Й__ Й__i_zЙ__ МЙ__d_YЛ__ ПЕ__ СЕ__________________7_7_7_7_YЛ__jЛ__v_ Л__ _М__q_┘М__ уМ__l_шМ__ яМ__g_шН__ ЄН__b_UО__ aО__]__Т__ _Т__V__Т__ YЛ______
______________________________
_Т___Т__t_эТ__r_мЧ__ ╦Ч__p_╪Ч__ ┘Ч__n_єЧ__ √Ч__l__Ш__ 4Ш__j_6Ш__ `Ш__h_bШ__ eШ__f_gШ__ КШ__d______7_7_7_7_7_7_7________
_КШ__МШ__ еШ__y_жШ__ оШ__w_╗Ш__ ┌Ш__u_█Ш__ ▀Ш__s_уШ__ _Щ__q_#Щ__ MЩ__o_OЩ__ RЩ__m__Щ__ ЙЩ__k_НЩ__ _7_7__7_7_7_7_7_7_7_7_НЩ__╖Щ__y_╣Щ__ ╝Щ__w_═Щ__ ўЩ__u__Ъ__ 2Ъ__s_4Ъ__ ^Ъ__q_█Ы__ эЫ__l_╫Э__ 'Ю__j_-Ю__ .Ю__h_6Ю__ 7Ю__f__7_7_7______7_7_7_7_7_7Ю__HЮ__ IЮ__y_RЮ__ SЮ__w_]Ю__ ^Ю__u_цЮ__ чЮ__s_ыЮ__ ЇЮ__q_¤Ю__ Я__o__Я__ _Я__m__Я__ XЯ__k_ZЯ__ _7_7__7_7_7_7_7_7_7_7_ZЯ__ХЯ__y_ЧЯ__ ╥Я__w_╘Я__ _а__u__а__ Hа__s_Jа__ Ба__q_ъл__ _м__l_
▒__ ╧▒__i_b┤__ n┤__f_S╢__ ZЯ__ ____________7_7_7_7_7_S╢___╢__v_"╣__ A╣__q_t╣__ П╣__l_p╝__ ╝__g_у┼__ х┼__`_╞__ _╞__Y__╞__ _╞__R_b┤________
______
______
_____________________╞___╞__ _╞__t_У╨__ ж╨__o_Я╪__ ╗╪__j_u▌__ Л▌__e_╬▌__ _▐__`_Y▀__ }▀__[_ф__ "ф__X_______________________________________
"ф__Aх__ [х__x_Qц__ mц__s_нц__ ┬ц__n_╪ш__ тш__i_шш__ Єш__d_#щ__ :щ____Bщ__ Pщ__Z__ы__ ___________________________________ы__&ы__v_Оы__ еы__q_бь__ вь__o_▒ь__ █ь__m_ э__ Pё__k_~ё__f_zў__d_вў____\___]__ __ _ы__ ____7_6____7_6____7_7_7__________
_ __ __v_\
__ c
__s_F___
___p_K___ W___m_Z___ f___j_╠___ ┌___g_+___ C___b_\___ s___]___________________________________s___ъ___ ____v_В___ М___q_└___ с___l_=___ h___g_▀___ !‑__b_k‑__ Ж‑__]_а#__ ╢#__Z_ь(__ __________________________________ь(__є(__v_5,__ N,__t_P,__ ?0__r_A0__ у1__p_ц1__k__@__i_#@__d_╦B__b_┌B__]_^G__[_sG__V_ь(_6____7_6____7_6____7______7_7_7_____
sG__НG__y_ЧG__t_╙G__
H__o_║M__m_▀M__h_сM__f_уM__a_ыM__^_?N__ ╪P__\_ЄP__Y_СQ__ _S__W_ь(__7____7____6____7_6____7_6____6____7
_S__:S__v__T__t__T__o_)T__ █T__m_▄T__ сM__f_уM__a_ыM__^_?N__ ╪P__\_ЄP__Y_СQ__ _S__W_ь(__7____7____6____7_6____7_6____7_6____А___Г___i_Ж___W_╔___J_с___J_у___H_______________________________╪P__\_ЄP__Y__C
B_!_____7_р__< ‑_______Ё_______<"‑_______Ё_______у_______n_:___n_<___l_>___l_L_____U___]_Г___[____________________________________________р__< ‑_?_C
B_!_____7_р__C
B_!_____7_р__Г___Е___n_Ц___k_Ш___i_Ъ___i_Ь___i_Ю___i_а___i_в___i_________________________________________________B_!_____7_C_<_
B_!_____7_р__в___д___y_ж___y_и___y_к___y_м___y_о___y_╝___l_╜___ ________________________________________________B_!_____7_C_
B_!_____7_р__C_╜___└___i_╧___g_╤___e_U___c_j___c_Ц___c_ ___c_Т___c_________________________________________________B_!_I_C_I_<!‑_______Ё_______Т___к___y_ш___y_%___y_3___w_*
__u_E__u_.___u_╥___u_═___u_______________________________________________________‑_______Ё_C_?_I ═___М___y_╬___w_O___u_п___u_Б___u_7"__c_F$__a_з%__a___________________________________________________C_C ‑_______Ё_______C_?_C_з%__╫%__y__&__y_T&__y_f&__y_Я&__y_▐&__y_р&__y__(__y_∙*__y_ -__y_____________________________________________________________?_C
-__?-__y_╢.__y_ф0__y_Н5__y_к9__y_▀:__y__;__w_у;__u_х;__u_________________________________________________________________C_?_C х;___?__y_щ@__y_&A__y_УA__y_·B__y_лD__y_УG__y_▓H__y_хH__y__I__y_____________________________________________________________?_C
_I__ I__y__N__y_ЇS__y_╘U__y_·U__y_+V__y_[V__y_wV__y_+W__y_TW__y_____________________________________________________________?_C
TW__
X__y_+X__y_эZ__y_X[__y_[__y_╗[__y_т[__y_·[__y_,\__y_╫]__y_____________________________________________________________?_C
╫]__ ^__y_=^__y_?^__y_&___y_Q___y_S___y__a__y_7d__y_mg__y_Bh__y_____________________________________________________________?_C
Bh__sh__y_uh__y_Hi__y_k__y_кk__y_мk__y_1l__y_Nl__y_}l__y_┤l__y_____________________________________________________________?_C
┤l__ъl__y_лm__y_╥m__y_╧n__y_·n__y_Зo__y_╕o__y_Gp__y_[q__y___________________________________________________________________?_C [q__]q__y_Йq__y_├q__y_ q__y_+r__y_Xr__y_█s__w_Уt__w_░t__u_________________________________________________________________?_C_G ░t__Вu__y_Дu__y_v__y_Jw__y_qw__y_Єy__y_╨z__y_Їz__y_({__y_A{__y_____________________________________________________________C_C
A{__e{__y_k|__y_П|__y_╣|__y_╩|__y_Ь}__y_d~__y_Я~__y_б~__y_┼__y_____________________________________________________________C_C
┼__tА__y_А__y_╖А__y_┼А__y_№А__y__Б__y_#Б__y_)Б__y_хБ__y_уГ__y_____________________________________________________________C_C
уГ__хГ__y_
Д__w__Д__w_,Д__w_.Д__w_PД__w_ЙД__w_лД__w_нД__w___________________________________________________________________G_C нД__╧Д__y__Е__y_(Е__y_*Е__y_LЕ__y_{Е__y_ШЕ__y_пЕ__y_╤Е__y__Ж__y_____________________________________________________________G_G
_Ж___Ж__y_Ж__y_еИ__w_ўК__w_ Л__w_{О__w_ХП__w_уП__w__Р__w___________________________________________________________________C_G _Р___Р__y_┘Р__y_
С__y_5С__y_lС__y_эТ__y_+У__y_dУ__y_ИУ__y_┤У__y_____________________________________________________________C_C
┤У__╞У__y_шФ__w_2Ч__u_4Ч__u_oЧ__s_qЧ__s_бЧ__s_═Ч__s__Ш__s_______________________________________________________________G_C_I_C _Ш__6Ш__y_gШ__y_МШ__y_░Ш__y_уШ__y_#Щ__y__Щ__y_НЩ__y_═Щ__y__Ъ__y_____________________________________________________________I_G
_Ъ__4Ъ__y_`Ъ__y_bЪ__y_vЫ__w_ЫЬ__w_┐Ь__w_ьЬ__w_*Э__w_LЭ__w___________________________________________________________________C_G LЭ__╒Э__y_╫Э__y_'Ю__w_рЮ__w__Я__w_ZЯ__w_ЧЯ__w_╘Я__w__а__w___________________________________________________________________G_C _а__Jа__y_Га__y_Еа__y_╖а__w_╣а__w_Kв__w_7д__w_tд__w_░д__w___________________________________________________________________C_G ░д__щд__y_е__y_ле__y_█е__y_ж__y_<з__y_Bи__y_Уи__y_си__y_%й__y_____________________________________________________________C_C