编译原理 第十章 目标程序运行时的存储组织_第1页
编译原理 第十章 目标程序运行时的存储组织_第2页
编译原理 第十章 目标程序运行时的存储组织_第3页
编译原理 第十章 目标程序运行时的存储组织_第4页
编译原理 第十章 目标程序运行时的存储组织_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第十章目标程序运行时的存储组织课前索引【课前思考】

回忆一般的编译过程,能否找到本章所讲内容在哪个过程?

为什么编译程序要考虑目标程序运行时存储区的管理和组织?

请归纳C语言和PASCAL语言的程序结构和数据类型的不同点

【学习目标】

全面了解目标程序运行时存储区的整体布局;每种存储区的组织方式和管理方法;并通过实例着重掌握,对允许过程嵌套定义的情况,栈式动态存储分配的组织方式和运行时进栈退栈的活动实现方法。

【学习指南】

在代码生成前,编译程序必须进行目标程序运行环境的配置和数据空间的分配。一般来讲,假设编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码和目标代码运行时的数据空间。我们这里所说的运行时的存储区组织,是指目标程序运行时的数据空间的管理和组织。

【难重点】

目标程序运行时,存储区域的整体布局,以及各区域的作用。

各种不同类型的数据表示。

允许过程嵌套定义的情况,栈式动态分配的组织管理。

对过程的调用,进入和退出时,栈式动态分配的工作原理。

过程活动纪录的各项内容和它们的作用,以及活动纪录的组织方式。

过程参数传递的不同方式。

【知识结构】

1从逻辑上看,在代码生成前,编译程序必须进行目标程序运行环境的配置和数据空间的分配。一般来讲,假设编译程序从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码和目标代码运行时的数据空间。数据空间应包括:用户定义的各种类型的数据对象〔变量和常数〕所需的存储空间,作为保存中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,以及组织输入/输出所需的缓冲区。目标代码所占用空间的大小在编译时能确定。有些数据对象所占用的空间也能在编译时确定,其地址可以编译进目标代码中。而有些数据对象具有可变体积和待分配性质,无法在编译时确定存储空间的位置。合因此营运行粉时的在存储影区常来常划依分成闹:目捷标区繁、静于态数肉据区亿、栈极区和使堆区葱,如两图1近0.撒1就冻是一漏种典那么型划因分,辛代码舞(c亩od毅e)昼区用初以存熟放目辟标代进码,定这是坝固定羽长度坛的,轧即编裁译时造能确卸定的喘;静半态数译据区末(s高ta控ti灵c悉da穿ta干)用悠以存渠放编敲译时领能确括定所季占用谨空间假的数福据;蚕堆栈够区(刘st盾ac辨k六an准d愉he鸡ap嘱)用蔑于可朝变数题据以个及管遣理过寸程活受动的施控制文信息才。具图1续0.王1蛋目标镰程序眼运行寄时存惰储区斜的典驳型划芬分蚀co得de杆st星at教ic隆d草at料a赴st钥ac衡k待↓

旺↑蚕he芦ap慨所谓押数据衔空间睡的分悦配,顺本质创上看食,是库将程婶序中浪的每支个名蹲字与淡一个选存储涛位置局关联挤起来末,该讯存储补位置组用以惨容纳婆名字像的值占。编买译程迁序分涉配目丰标程浪序运历行时雹的数侨据空豆间的浆根本巷依据鲜是程乏序语煌言设蝶计时午对程治序运笔行中脊存储绩空间往的使槐用和贯管理煮方法螺的规蠢定。便我们丢知道您,即灭便有瞒些名旨字在喉程序晚中只庙声明机了一客次,菌但该凭名字良可能逼对应版运行氧时不箩同的居存储沈位置垫,比绘如,伴一个弓递归逃调用野的过需程,萌在执棵行时晒,其判同一孙个局崇部名牙字应拆该对浸应不渗同的强运行络空间鄙位置孝以容香纳每柱次执坊行时文的值酿。在拍程序柔设计草语言仰语义研学中偶,使遵用术爽语e车nv傍ir稍on背me需nt将表示今将一井个名如字映携射到叔一个致存储特位置梳的函魂数,励术语济st左at粉e表狐示存穗储位昨置到彼值的龙映射咳,使限用术抖语

颜崇en避vi故ro浆nm敞en者t函脸数表各示

新判en歌v:形N身→S寿(潜N到愉S的初映射洋)

态穿如图美10仿.2曲所示榴。改图1害0.应2刑名字毅到矿存储鸦、到判值的奋映射岭编译泡程序洽分配浓目标眼程序狐运行罪时的岔数据之空间唱的基江本依窝据是鹿程序效语言锁设计团时对冲程序绿运行田中存养储空截间的皱使用原和管棒理办垫法的卸规定惨。决饮定存撞储管围理复流杂程撞度的绕因素陕--君源语颠言本缠身,厚比方溪源语君言允锐许的在数据榴类型柔有多必少?涨语言泉中允贪许的霜数据时项是乱静态立确定搁还是咐动态仇确定窄?程金序结拴构有干什么贿特点著,是掘段结单构还馒是分谷程序补结构修?过辰程定专义是紫否允服许嵌驶套?酬等等摇。

辞瞒源语初言的醒结构却特点挤、源甩语言城的数僻据类非型、冲源语蜡言中助决定引名字请作用顶域的斑规那么词等因粮素影搭响存丢储空菊间的叹管理坏和组洒织的茎复杂汁程度柴,决猾定数蕉据空原间分驶配的扎根本已策略衬。

悬戴本章虫将介剪绍存煎储空使间的裙使用舍管理卸方法尖,重遗点针脂对栈晌式动温态存缎储分兽配的糕实现楼进行遥讨论睡。熟10招.1技数广据空留间的患三种评不同勺使用挤方法猾和管蛙理方笑法臣数据婆空间折的使内用和地管理袋方法稿分成落三种幸:静秋态存廊储分植配、更栈式肥动态傅存储访分配旁和堆委式动艳态存赛储分显配。

涌10坝.1灯.1蜓静脆态存俭储分羽配

溪付这种毅存储酒分配古非常墙简单扛,如惩果在蝶编译结时能赚确定亡目标植程序叶运行陆中所严需的犹全部玩数据债空间葡的大信小,示编译申时安舞排好眼目标吴程序裁运行吹时的匪全部争数据顿空间氏,确馅定每淹个数蓬据对胸象的盘存储口位置句,称肆这种舟分配抹策略每为静鸽态存社储分岔配。羊如果吨一个叠名字椒的性鸣质通庙过说绣明语杆句或撒隐式续或显悠式规萌那么而悄定义后,那么维称这沃种性死质是坝"静判态"坟确定闲的。迎像F春OR胖TR己AN袍这样具的语牵言,喇其程雁序是侵段结衣构的卡,即博由主疮程序引段和断假设干保子程袜序段凡组成支。各渔程序遍段中找定义骆的名许字一赶般是繁彼此艇独立唤的〔头除公陡共块擦和等歉价语丛句说吊明的选名字碑以外碎〕,蛋也即斯各段估的数悠据对搬象名艰的作英用域父在各亦段中绝,同端一个总名字疫在不绵同的秤程序栏段表辫示不隶同的鼻存储侨单元锦,不承会在权不同斜段间弯互相阅引用膏、赋狠值。考另外撞它的电每个镰数据岔名所刃需的姓存储射空间贱大小痕都是皂常量至〔即熔不许布含可颤变体幼积的袄数据刑,如惜可变哪数组贷〕,引且所化有数芦据名峡的性夺质是签完全江确定废的。淹这样荒,整扛个程盐序所邻需数刑据空旨间的描总量品在编兼译时含完全足确定讯,从度而每车个数涝据名治的地狡址就趋可静乘态进首行分皆配。遵换句斑话说待,一棒旦存坚储空扣间的维某个哄位置榨分配泛给了通某个凑数据下名〔斑关联模起来娃〕之某后,窗在目贿标程瓶序的门整个四运行急过程穗中,库此位灵置〔仿地址覆〕就蝶属于方该数旬据名禁了。责图1氏0.铸4给蓬出一抱个F翁OR绍TR扬AN物7他7的琴程序杜例子融。在门图1折0.揭5中塌描述铁了该损程序召中局锹部变宗量的技静态爹存储阁位置新。惑图1减0.殖4浙一个愚FO赠RT夺RA难N雄77响的例态子诚耻掀(1僻)咐PR只OG粒RA挽M满CN荣SU哨ME

强宫(2枝)罗CH锡AR厨AC圣TE鸟R猪*深50柜B慌UF不/纳/程告序体搭所拥尘有的齐静态景量B帆UF

桶写(3王)咬IN录TE在GE蛇R蜓NE不XT惊/近/程按序体京所拥狂有的捡静态谱量N堵EX伟T

溜标(4能)歪CH锄AR拉AC乱TE于R傅C,陵P任RD尼UC适E窗//垄程序嫂体所歇拥有肃的静咳态量己C

疮植(5吴)辈DA给TA洲N左EX础T惰/1谢/,懒B宝UF跪/浆'丰'当/

嚷捎(6总)很6促C察=P慕RD橡UC原E(速)

泛枪(7升)村对BU柔F(明NE勇XT雅:N颗EX晓T)陷=C止

枝普(8谋)蜜馆NE舱XT宿=N爽EX葱T+交1

肤甲(9燥)辨窝IF捉(C纲.睁EN裤.耐'轿'睛)G滨OT欧O落6

捡钻(1合0)捡怪W如RI炸TE归(骆*胜,垄'丙(A吧)'俱)暑BU尺F

闯优(1连1)贫E么ND

菌后(1送2)有C纪HA考RA机CT寇ER顿F裤UN冲CT馋IO设N肯PR询DU剩CE锤()

滴诞(1喜3)斥掩CH虫AR垂AC野TE弯R馋*薪80抓B安UF移FE归R

危融(1箩4)犬磨IN查TE贤GE俱R层NE肌XT

里海(1甜5)葛越SA垫VE塔B迎UF侄FE暖R,担N勇EX鞠T

倚访须唇//绑PR粒DU始CE蝇函数慨体所俩拥有遥的静唉态量靠BU喇FF污ER叫,乱NE等XT

望披(1旧6)层枕DA睬TA诉N平EX盏T闸/8至1/

匹技(1潮7)散膏IF盘(扯NE未XT银.行GT易.8爱0)员TH窃EN

镰核(1平8)窝广R全EA宗D炊(叫*沟,'茎(歌A)事'油)B载UF陈FE欲R

处户(1旬9)采缸N畏EX继T=喝1

毯尚(2泉0)悔煌EN支D宾IF

瓣唐(2深1)赵P晃RD蛙UC袜E=栋BU玩FF治ER辅(N挑EX药T:痒NE浊XT匪)

素使(2未2)乳沉NE园XT并=N盖EX区T+娘1

资继(2徒3)猪E傲ND乳图1侵0.缘5顽FO葬RT六RA壮N7慎7的恋静态味存储锄分配菠10语.1栋.2万动汗态存戚储分激配

宏给如果愧一个这程序需设计欺语言谅允许炼递归抬过程爪、可扣变数壁组或举允许绸用户京自由脊申请仰和释堆放空看间,纯那么汪,就病需要所采用猪动态托存储挤管理垮技术第。因绣为对睁于这漏种程蛋序在母编译包时无仰法知释道它请在运赶行时料需要亏多大乳的存益储空都间,辱它所李需要脾的数期据空弟间的泳大小护需待价程序撕运行骡时动傅态地田确定故。冲假设一页个数睁组所洽需的腿存储李空间棋的大访小在怪编译冬时就氏炸道,崖那么称右它为泳确定法数组蜂,否杂那么称恳为可认变数过组。

永帽例拾:

寸建pr沿oc盗ed斗ur桶e徐A(捞m,祸n:今in锡te南ge掠r)归;

遵捕be刻gi荒n糕re懒al允z乡;

填轮哗脸ar腐ra辆y汪B[麦m:面n]引;

配鱼秧b蓬eg幅in

妄粉庙·叮·记

退耗录·腿e有nd税;

愚踩en皂d;

轿会B[饰m:滑n]借为辛可变坛数组歌,B雪的上斥下界野是过绢程A陈的实特参,陆A被妻调用储时才腥能确窝定。送动态朗存储乏管理吗技术侨有两粮种方座式:页栈式绕〔s刻ta姐ck支〕和泪堆式躺〔h狡ea灭p〕咏。下歉面简违述这律两种辆方式抬的原强那么。鼠1.查栈式蒜动态研存储水分配

王显这种浸分配顺策略涛是将固整个灭程序之的数铜据空例间设想计为忘一个蚊栈。贸在具防有递便归结箱构的冰语言荒程序祸中,停每当亡调用敲一个腾过程骗时,偏它所团需的图数据麦空间猾就分无配在济栈顶弱,每赠当过依程工砌作结趟束时权就释核放这翁局部耕空间会。过纺程所调需的常数据评空间摧包括葬两部阁分:个一部圈分是咽生存饱期在匠本过夕程这郊次活漆动中恩的数拿据对丽象,螺如局疼部变闭量、扎参数仆单元班、临恐时变饶量等忧等;衔另一剑局部陷那么是涌用以强管理腰过程减活动泥的记雹录信重息。贵即当蝴一次而过程丈调用周出现缓时,末调用市该过吩程的卸那个袍过程江的活茫动即赌被中里断,冒当前故机器滥的状盘态信恒息,阶诸如煮程序雹计数摧器〔总返回放地址络〕、扁存放重器的贫值等俘等,末也都扩必须计保存艰在栈咽中。歪当控瓜制从号调用婆返回莲时,琴便根轮据栈受中记戏录的吧信息福恢复束机器欢状态画,使饮该过杏程的星活动警继续费进行嫌。至持于在毙这种犯分配是策略桌下,旅如何酬实现晒动态睬地分雷配和型释放易一个气过程拼的数筒据空猪间,有如何阶实现洒对非情局部球变量纱的引胆用、途参数龄传递伏以及守对可呼变数戴据结例构〔膏如可络变数怕组〕点的空僚间分言配办释法等坝等,撒将在民后面怨几节区给予菊详细唱讨论跟。

联京栈式狗动态盛存储伸分配圆策略泊适用娇于P德AS依CA制L,睬C,需AL探GO突L之祸类具欣有递爹归结泰构的耻语言青的实而现。驻

愧2.饼堆式糟动态率存储贼分配

四银如果计一个通程序所语言误提供垒用户辆自由骡地申望请数乘据空漆间和狡退还跪数据说空间粱的机搭制〔悲如C税++瞒中的孩ne阴w,劫de只le物te代,P弦AS林CA印L的析ne持w,鉴等机窃制〕酸,或驶者不贸仅有疗过程在而且朗有进毫程的站程序令结构震的情唉况下崭,空腐间的谁使用盖未必战服?炸qu名ot瞒;先蒙申请冶后释姜放,疮后申劫请先枝释放锋"的反原那么冷,那妇么栈晶式的煤动态矿分配拆方案鉴就不次适用债了。子通常细使用寨一种淘称为陵堆式丽的动业态存做储分荒配方视案。氧Pa揉sc锅al米语言左中,宰标准乒过程远ne驰w能苦够动旱态建闯立一返个新匪记录性,它席实际乌上是惰从未泽使用锣的自仆由区营〔空平闲空偶间〕较中找穷一个教大小覆适宜柳的存束储空虏间并术相应厦地置完上指讽针。奶标准递过程陵di鱼sp版os楼e是佛释放巷记录全ne注w与壮di短sp挤os灵e不章断改程变着挑堆存字储器胶的使休用情喉况。烟这种译分配肠方式羡的存坊储管柜理技傍术甚邀为复船杂,暮我们喷这里肿举出迫这种脊分配爆方法宅必须响考虑浇的几古个问华题。

撞代首先第,当患运行话程序看要求袄一块胆体积腔为N者的空政同时经,我鲜们应眉该分六配哪评一块怜给它喘呢?极理论黎上说秆,应雀从比均N稍麦大一傍点的扛一个灿空闲耕块中坊取出裕N个属单元止,以怕便使震大的呜空闲常块派逐更大掏的用脑场。药但这识种做忙法较捧麻烦嫩。因执此,称常常逃仍采容用"她先碰折上哪比块比坡N大班就从咬其中对分出阴N个敞单元纲"的店原那么丹。但撕不管窗采用梅什么待原那么皂,整艳个大氏存区玻在一扯个定钉时间狠之后挤必然时机变跑面零拾碎不罚堪。滔总有么一个亮时候批会出伞现变苏样的浅情形榜:运妻行程讯序要监求一砖块体兔积为面N的踪空间宁,但西发现绩没有钉比N粗大的陵空闲获块了题,然离而所痛有空桑闲块酱的总贿和却而要比往N大帮得多伙!出趣现这逃种情案形时惕怎么学办呢迷?这程是一如个比真前面乖的问兄题难孝得多级的问跪题。边解决礼方法蒙似乎粉很简猾单,珠这就篇是,鱼把所鞭有空耗闲块绵连接膏在一粗起,澡形成线一片螺可分汪配的组连续拨空间幅。这丧里主很要问埋题是傍,我惨们必踏须调拌整运折行程协序对读各占吐用块敏的全捉部引捞用点悔。

拘顾还有该,如鹅果运琴行程摩序要弟求一夕块体束积为捕N的舟空间咳,但列所有宜空闲铲块的少总和劳也不歉够N葬,那指又应搂怎么练办呢药?有正的管衰理系取统采膜用一能种吊才做废遗品回苗收的鸟方法块来对式付这隙种局雪面。押即寻宴找那皂些运莫行程棍序业况己无才用但条尚未焦释放原在占浪用块曲,或锄者那谁些行缩程序氏目前屑很少辉使用葛的点创用块补,把盖这此尝占用历块收神回来节,重怀新分还配。裕但是鞠,我东们如敞何知绞道哪疫些块虚运行各时在藏使用革或者励目前陡很少晕使用惕呢?锁即便写知道昂了,昨一经淘收回穷后运手行程名序在央某个尿时候截又要泳用它坟时又开应该湾怎么听办呢友?要夫使用羡废品罢回收云技术舰,除爽了在义语言倦上要除有明稿确的懒具体扭限制敢外,他还需黄要有晋特别将的硬骑件措努施,况否那么换回收仔几乎刑不能裙实现碎。班堆式拣动态层储分塔配的迫实现陡通常雄有如榨下三系种途棕径:

剥唤1夜定长蠢块管泻理

爆陪堆式庙动态久储分祥配最劣简单仿的实坐现是柴按定劣长块劳进行煮。初析始化积时,源将堆誉存储维空间寨分成距长度炭相等督的假设挠干块缸,每裙块中满指定稀一个良链域票,按塞照邻盛块的昏顺序担把所贡有块厚链成它一个发链表迷,用券指针醒av绢ai风la宇bl粒e指利向链坟表中荐的第蚊一块坛。

嘴勒分配佳时每警次都梨分配抄指针愚av立ai殖la蜡bl泼e所唐指的循块,批然后柄av构ai放la荐bl坊e指漂向相腔邻的暖下一殊块。百归还瘦时,录把所聋归还淹的块突插入床链表搭。考驳虑插茶入方边便,摧可以鸣把所手归还殖的块堤插在型av券ai膀la繁bl寺e所染指的嫌块之鸟前,悼然后膏av闷ai派la瞧bl颈e指火向新拦归还简的块丹。

泡森2咬变长消块管迎理

屯葛除了斤按定撑长块诱进行愿分配僵之外胁,还倦可以瘦根据玻需要澡分配覆长度帆不同婶的存畜储块突,可符以随福要求虎而变习。按都这种认方法鹅,初私始化露时存中储空暗间是悼一个悦整块盘。按驰照用诞户的变需要目,分渗配时替先是旧从一徒个整大块里闪分割樱出满勤足需础要的遇一小也块,火以后呼,归绪还时蜓,如去果新剑归还基的块左能和调现有民的空送间能短合并扎,那么朵合并锹成一击块;画如果蚂不能姜和任杨何空蠢闲块从合并狭,那么疤可以挑把空乘闲块壳链成顾一个弦链表探。再掠进行桂分配倘时,弃从空肌闲块墨链表寨中找仙出满轨足需吵要的垮一块视,或项者整翅块分含配出运去,基或者疏从该紧块上类分割疼一小客块分各配出宗去。即假设空把闲块押表中辅有假设腥干个麦满足谎需要机的空矩闲块必时,雪该分暑配哪刃一块甜呢?飞通常阀有三破种不磨同的元分配爽策:挨①冻首次翅满足因去:喉只要馆在空凝闲块鲜链表聪中找毯到满争足需王要的袄一块遇,就隙进行悼分配尘。如粘果该腹块很副大,研那么按贼申请飘的大苏小进蛮行分降割,咸剩余量的块第仍留掩在空党闲块馋链表新中;姿如果遮该块阁不很恨大,舰比方另说,纱比申佛请的菌块大司不了妨几个屑字节青,那么炎整块萄分配肠出去券,以挎免使欠空闲哄链表沿中留吴下诈独多无蛛用的过小碎搁块。

像什②里最优健满足队法:圣将空隙闲块析链表鞋中一缸个不幼小于那么申请框块且雄最接凯近于写申请眼块的纠空闲寇块分呼配给晓用户武,那么泉系统长在分枕配前粒首先犁要对陷空闲苏块链竖表从隶头至站尾描菌一遍弄,然跨后从陶中找佳出一府块不芬小于巴申请切块且暮最接偿近于寻申请驳块的粒空闲充块分琴配,同在用疲最优银满足腐法进赴行分循配时辨,为斑防止梨每次笔分配刃都要沃扫描名整个罩链表吧,通调常将堆空闲姐块链触表空绿间的姨大小狡从小淘到大衫排序丹。这那样,充只要莲找到且第一坝块大浮小申明请块区的空躲闲块姥即可哗进行轨分配它。当古然,桐在回燕收时线变需米将释纠放在答空闲况块插财入到扯链表复的适践当位注置上膝去。外

违浩③辅最差吉满足肆法:升将空狱闲块沫表中横不小迅于申满请块减且是渣最大珠的空姑闲的丛一部液全分殃配给斥用户饲。此燥时的醒空闲麦块链扰表按碎空闲肝的块代的大啦小从核大到剃小排卵序。边这样朋每次讲分配殊无需表查找烘,只苍需从峰链表防中删厚除第都一个骡结点病,并剂将其缴中一兄局部物分配镇给用蛙户,木而其左它部差分作虏为一沈个新赌的结额点插软入到轮空闲栋块表否的适器当置磨上去韵。上渣述三社种分符配策遭略各腐有所朋长。廉一般煮来说恢,最借优满淘足法疗适用散于请庄求分给配的贡内存脚大小择范围掩较广珠的系孤统。让因为泳按最头优满议足法前分配晨时,宪总是露找大光小最筝接近远于请搏求的停空闲筋块,嘱系统如中可稀能产梯生一凉些存贩储量草很小交而无瘦法利柄用的郊小片茂内存陶,事腹时也轮保存晃那些为很大关的内湖存块笋以备烘响应告后面榴可能猪发生脏的内历存量但较大壳的请袋求。费反之观,由预于最礼差满缘足法茫每次艳都是坡从内爸存最感大的废结点仇开始谜分配读,从丰而使惰链表休中的减结点喂趋于护均匀献。因制此,泼它适剃用于阔请求袜分配波的内斑存大轨小范且围较盆窄的绸系统香,而端首次晒满足胃法的束分配钩是随法机的萍,因捎此它研介于详两者毙之间罗,通指常适环用于袖系统描事先碌不掌唱握运济行期天间可笼能出浩现的岁请求理分配誓和释致放的秃信息虫情况夺。从裂时间帽上来歪比拟续,首钞次满节足法苹在分辅配时啦需查碰询空妥闲块腔链表漫,而饼回收哀时仅仪需插挡入到承表头嗽即可勇,最滥差满貌足法锦恰好潮相反养,分辨配时与无需鲜查表亦,回谱收时昆那么为陷将新亭的空勉闲块邀插入漆表中探适当销的位雹置,丽需先扭进行晋查找遇,最破优满很足法误那么不检论分悟配与甲回收勤,均鼓需查橡找链鲜表,宰因此拳最费越时间粒。

屿盏不同畅的情努况应姻采用冶不同俊的方柱法。搁通常佳在选桨择时旨需考虑虑下聪列因诊素:的用户摄的要坟求;神请求检分配息量的幼大小仔分布松;分纹配和罚释放要的频指率以答及效挖率对像系统早的重回要性洽等等准。

汁足至于丘存储拾回收亚的实秒现我坝们这躬里不疼进行切讨论慰。1得10悟.2送栈替式存盛储分陈配的援实现覆前面倚提到捆,使啦用栈膊式存逝储分兼配策屯略意腐味着蛋,运如行时粮每当毯进入画一个员过程耽,就统在栈脖顶为懒该过来程的眠临时标工作悔单元予,局兴部变族量,升机器秆状态婚及返朗回地辱址等倚信息寨分配粘所需璃的数际据空投间,送当一排个过语程工辽作完跌毕返竟回时域,它舱在栈脱顶的唱数据他空间敞也即印释放逐。本蹦节我轧们将诱以三诊种语滚言结弊构为敞例,材详细敌讨论动栈式婚存储粪分配谊的实项现。

猾息为讨疮论方终便,币首先娱引入伟一个偶术语引--厨过程塑的活易动记莲录A鼓R该(A到ct伏iv机at配io林n友Re挡co耕rd但)。卖过程奋的活新动记排录是券一段哭连续漠的存检储区令,用伶以存思放过吸程的孔一次吧执行颗所需掏要的僚动态开信息迹,这出些信盈息可园以如返图1据0.蔽6所门示。届图板10貌.6单过相程的钳活动勇记录殖临时挥工作灶单元妥局部肺变量邻机器阅状态文信息凡存取悟链槽控制眠链凡实参脉返回假设地址宁对它昏们的业简单闯描述稠如下窃:

辨侵①新临时车工作隶单元城:比吸如计那算表铜达式堤过程妻中需群存放告中间喇结果无用的仓临时公值单闲元。

州斥②充局部治变量占:一支个过猫程的隙局部损变量毙。

拍蹄③勤机器暗状态败信息贷:保籍存该富过程诸执行刺前关段于机跳器状压态的中信息哈,诸召如程姻序计求数器趋、寄姜存器轻的值陕,这败些值旗都需丑要在员控制片从该膨过程矿返回绑时给侍予恢酷复。

规冷④芦存取导链:锦用以溜存取迈非局天部变者量,看这些哑变量泽存放孝于其县它过雨程的抖活动兔记录询中。桃并不闪是所堪有语腥言需跳要该昼信息伞。

粗联⑤很控制疯链:抽指向假设调用轨该过窑程的犁那个动过程哑的活私动记暖录,测这也划不是板所有洗语言定都需码要的赞。

洽能⑥滑实参谋:也绕称形译式单陶元,救由调扬用过留程向珍该被谋调过贴程提古供实宗参的仆值〔胃或地架址〕旋。当湿然在带实际播编译韵程序帅中,句也常植常使基用机瓜器寄忘存器芹传递盲实参披。

胶见⑦连返回传地址集:保燃存该东被调引过程伪返回配后的雪地址缺。

阶赶这些升域的绝大小拿在编隶译时耗是已豪知的淹,如嘴果局亡部变斯量中湖包含涉有可鹿变数席组,昆那么愤那么采沃用第馋9.时2节浆中所抱介绍姜的内狼情向币量,厚将内片情向钥量置哗于过锋程活砌动记得录中脸。另猛外,焰有些衫语言反的编疑译程振序还火将参资数个箭数存瞎放于络活动睡记录防中,辛以便天进行耕参数恨个数薄的检方查。卧10剖.2凑.1焦简郑单的茅栈式屡存储那么分配熊的实悟现

驰工首先进从一症种最终简单都的程西序设盛计语承言结有构讲按起:芒没有你分程付序结逆构,柿过程时定义戏不嵌堡套,债但允良许过拒程递萌归调升用。

搏本其程见序结炼构如待图1需0.槽7所鉴示。油图鉴10汽.7耕过程穷定义言不嵌随套的倚程序小结构提

踢奋pr致og村ra脏m枯ma详in携;越致//夜主程秃序头

说匹全局蜜变量槽或数秃组的址说明淋;

哄认pr图oc墙R谎;躲道议/陡/过为程R告的头

尘义…重析施效/合/过欠程R败的体

债耀en析d阀(R服);败筐挖/索/过垮程R般的尾

剪珍pr迹oc银Q降;虾擦斑/忘/过瓣程Q厉的头

房许…快鞠绩去颤//借过程金Q的挽体

籍涛en低d污(Q哈);谦意疯/朵/过馋程Q充的尾

遵围主程语序执亚行语握句绞/茂/主邪程序井体

混公en己d.蜂(m问ai奥n)牧闷辞//缴主程删序尾纱这种狂情况翻下,桂采用敬栈式宋动态虾分配笑策略时,即权,运币行时液,每勉当进倡入一迈个过雁程,虎那么为碍该过晒程分晓配一痛段存定储区套,当兔一个波过程常工作狮完毕章返回初时,端它所田占用欢的存滴储区胶可释精放。悼程序常运行评时的膨存储坐空间皮(栈支)中剃在某解一时客刻可浪能会障包含拘某个斥过程申的几煎个活壤动记性录〔停某个杠过程旷递归夫调用梳的情跟况〕弹;另垒外,原同样剖的一搁个存天储位样置,卷在不定同运熊行时村刻可输能分串配给禁不同广的数拖据对孔象。宴例如透图1四0.沉7的树程序世结构抬中,漂假设主跃程序宁调用殖了过事程Q乏,Q置又调懒用了捆R,窃在R富进入冷运行贯后的叫存储论结构胆如图脑10慧.8知〔a饱〕所录示。习假设主罢程序市调用观了过双程Q库,Q扫递归与调用岔自己建,在虑Q过愉程第太二次脱进入膝运行剃后的抓存储轰结构椅如图板10浮.8微〔b搏〕所僵示。抄假设主采程序构先调惠用过倡程Q畅,然患后主引程序缝接着国调用袜R,陵且Q高过程巾不调掘用Q尊和R贡,这脊时Q砖和R剂进入赔运行竿后的集存储刷结构衡,先芝后分穗别如流图1承0.局8〔董c〕教和1况0.竟8〔违d〕惧所示记。棚图稼10摘.8扶栈式棋存储鸭分配椅常常下使用兔两个醋指针胁指示焦栈最芹顶端让的数拖据区郊,一童个称蜘为S抛P,估一个捧称为菊TO醉P。任SP农总是扣指向表现行特过程聚活动嫩记录辽的起谁点,饶TO阴P那么边始终尿指向年已占呆用的买栈顶等单元昌。欠这种配语言思假设含镰有可宾变数且组,唐那么其被过程躬活动德记录诚的内朽容可羡如图微10泉.9妨所示锄。山图1凝0.谜9无定嵌套疗定义烈的过处程活穴动记邻录内稻容答图1脉0.蛮10墙分配眉了数优组区疗之后检的运燕行栈勤这里房把控栏制链立也称馒作老舒SP购,即究调用基该过碍程的新那个怒过程绍的最斤新活焦动记好录的袄起点仔。

记线假定如图1阅0.假设9所云示为案图1央0.篇8〔瓦a〕泥中现脱行过猫程R哄的活包动记区录,乔SP烈为此磁过程内活动形记录赴的起协点,攀TO城P指油向为缓此过块程创套设的折活动渠记录挎的顶梁端,棵并假且定R你含有踏可变门数组久,那么爬在分成配了邪数组身区之便后T沙OP权就指条向数淹组区落〔整不个运伯行栈绝〕的资顶端良。图跳10兴.1萍0表伟明分悄配数事组区炕之后喝的运志行栈芽情况炮,可桶以与摊图1大0.赤8〔罪a〕订对照宜。

伟骄在过取程段只中对胳任何脾局部岁变量冬x的惜引用帐可表艺示为傲变址拴访问条x[死SP峰],硬此处初x代师表变丸量x线的相舟对数慢,也鸦就是壳相对痰于活拐动记珍录起芳点的天地址耀。这铸个相裤对数眯在编滋译时董可完满全确朗定下咳来。滑过程合的局丘部数胆组的码内情妥向量挤的相寺对地编址在存编译叫时也厅同样批可确教定下煌来。扣数组蹦空间枕分配芳之后渗,对皮数组悔元素担的引忙用也私就容柴易用良变址你访问耗的方圾式来龟实现萝。枪10涝.2才.2候嵌虫套过轧程语脉言的既栈式调实现

拥谁我们说所熟膝悉的占PA阔SC细AL阀语言川程序仿结构伯的特霸点是昆允许召过程斤嵌套摧定义燃,一宇个过不程可值以引茅用包淘围它站的任粒一外造层过筝程所缸定义读的标修识〔酱如变雁量,世数组颤或过舞程等殖〕。让如图创10姜.1气1所盾示。含假设不龟考虑逼它的摔"文耗件"给和"年指针至"类课型,幼它的气存储概分配耽也是冠采用顾栈式奶动态斯分配偿策略矩,只圣是它范的过盛程活暑动记喷录中占应增猾设一绘些内胞容,钉用以崭解决匹对非乡局部方变量圆的引份用问魄题。氧图1蝇0.笑11虾具有像嵌套捎过程钞的P证AS律CA孝L程仙序(1)programsort(input,output);//sort的过程头

(2)vara:array[0..10]ofinteger;

(3)x:integer;

壤本(4肿)徒p消ro暖ce咽du估re判r区ea添da抹rr灰ay纷;层//扔so貌rt纯内嵌期套定顽义的膏re谨ad必ar菠ra佩y的丸过程座头

阔南(5兔)狗饼va德r渣i:弹i旱nt章eg轧er寿;

菜赌(6疾)糠馅be叼gi竹n…送a…背en摧d{级re献ad滚ar嫂ra橡y}配;窑//纸re执ad聋ar墓ra班y的灶过程塑体

卵婶(7痛)是p容ro葱ce坛du角re暂e扶xc徒ha庭ng帝e(悟i,询j:傅i灭nt鉴eg观er加);

些诸刚卖珍段//洲so茶rt亿内嵌感套定房义的现ex顶ch件an烤ge岂的过溜程头

克郊(8恳)艺贺be类gi六n

军肥(9叼)忧绿x厌∶=泰a[系i]锣;贿a[尺i]嗽∶=撇a[猪j]雀;办a[巷j]豆∶=羡x;规/伴/e筋xc障ha钱ng撤e的羊过程聪体

离吊(1央0)偷注e根nd书{e厉xc轨ha架ng蹈e}掘;

愧问(1描1)协严pr趁oc致ed林ur骗e输qu语ic祸ks渐or膛t(召m,圣n:身i迷nt资eg状er茧);

燕梁踏广湾鲁//迹so旷rt莲内嵌埋套定罢义的纪qu糖ic最ks艰or往t的且过程驼头

困报(1衰2)磁肥v头ar匆k娇,v杨:穴in劲te涉ge崖r;伤

讽调(1饿3)积办f扶un容ct己io艇n慰pa喜rt估it烧io摄n(尿y,如z:孝in居te模ge励r)喘:i览nt寺eg罢er咏;

子壳修富或抄//非qu粪ic钉ks引or这t内颤嵌套烧定义喘的p颤ar剧ti风ti梢on逮的函美数头

惜吉(1抽4)方平垫va闻r工i.室j:学in吹te鞋ge翁r;

你献(1约5)林打哀be彩gi评n巾…a喜…杂//贤pa卵rt朗it撒io遭n的葱函数折体

您古(1极6)躬蛾姐…v湖…

殿搞(1察7)羞慌云…劳ex饿ch含an奉ge梁(i境,j草);希…

宝猴(1蛋8)使霸梁e简nd辩{p张ar砌ti益ti往on项};

品桂(1慈9)捡缺b幼eg棕in范…e敲nd陡{q六ui彼ck博so愿rt歼};告/熟/q泻ui珠ck伏so浸rt好的过消程体

再防(2钢0)祖b倒eg否in确…e适nd副{s折or赏t}岁.鄙//阀so应rt乓的例虹程体超图1双0.羊11葬的P都AS塔CA河L程宗序中黄过程尊定义嚼的嵌荷套情衬况如吧下:

芝缺so逃rt

请号r朗ea英da硬rr霉ay

服劳e撤xc骨ha福ng习e

雨惠q桃ui狮ck丰so蔽rt

我布顽pa此rt统it戏io压n

添惨这里拆不妨百将整右个程尘序s古or眼t看裤成最膊外层悉的过甲程。生过程掉re抹ad私ar奇ra笨y,苦ex铁ch诱an驻ge框和p抽ar甜ti矩ti饲on阳中引武用的软a均逐不是锅它们渐的局诞部变省量,肠而是拳过程哲so案rt傅的局急部变素量。期假设乖过程福so块rt狡激活驱(调荒用)肥了过榴程q廊ui委ck趣so眉rt扯,这天时存遵储栈跃中的章情形嘱示意档如图免10倾.1译2,胳其中阻在q党ui臂ck揭so瓶rt伶过程革活动辅记录姨中有冬一(益或一罢些)没存储肃单元芹(用虏斜线辜描绘样)用糊以记腹录过毒程q氏ui刃ck歪so片rt宋可以游引用加so亮rt扔中定扇义的居变量醒a和设x。拳也就望是说家,为杏了解蹄决对稠非局般部量锐的存瓣取问载题,能必须玉设法但跟踪客每个编外层趴过程浙的最熄新活仆动记免录的腊位置蔬。接图俘10光.1迈2存载储栈扑布局刊实现预对非穷局部顿量的僵存取蜻的方小法-疫跟踪谱每个丛外层彻过程马的最腾新活约动记荒录A侄R的您位置促。

哭酒跟踪暴方法索:

鲜哭①案用静亚态链砍〔如以PL界/0骂的S津L〕遗。

暴景②腐用D慎IS地PL润AY自表。却跟踪室的办宽法很词多,愉我们乓介绍苗两种昏,一胡种是喂在过慕程活踏动记贱录中庸增设言存取贯链,胸指向瞧包含榜该过嗽程的差直接财外层纲过程功的最伪新活室动记为录的踪起始恰位置括。过活程活端动记辟录的象内容草如图惨10旗.1袜3〔史a〕登所示兴。图除10效.1砌2所宁提到竭的情偶况可第用图匆10灿.1零3〔笋b〕庸说明瓦。丢图午10插.1亦3宰嵌套划定义液过程孟的活电动记蛙录和芒存储枝栈仔回忆超PL怒/0枪编译值程序乐,其迹假想虚机汇困编解峰释程靠序的剥环境绕之一确是数弊据栈叼st尖ac绸k,端它的旅存储枪分配税策略焰便是论栈式答动态削分配寒的,典因为肤PL胸/0塞是P昨AS搭CA饶L的柴一个帮子集软,它葱的过庆程允他许嵌勉套定扑义,伐它的佣过程兽活动劫记录打中便咏有存扔取链兼,在跟PL汗/0鸡编译厉程序列中我职们称纤作静谨态链矛。因最为P宇L/犬0的提过程泪是无碑参过雀程,煎PL般/0屿也无赢动态毫数组丰,所鞋以它吴的过笛程活映动记信录的水内容匆如图裹10返.1历4所肢示。驾图昼10波.1轿4姿PL唱/0低编译困程序弃的过焰程活妨动记息录碎再回贫到图幕10抚.1凭1的掩例子添。如蕉果该骗程序蝴的某肝次执稠行顺圾序为蝶:

角鹅so段rt拦→q声ui怎ck枣so园rt历→q保ui惑ck共so反rt帮→p鹅ar奋ti惹ti递on铺→e兴xc崭ha骂ng巩e…

它游即主穗程序觉(最陆外层挠过程兽)s膏or为t开总始执尸行,爱继而图进入聚过程瘦qu粒ic散ks雾or挨t,碍而又懒一次表进入抚过程谈qu闷ic财ks宏or盛t,欢接着滴进入酒过程颠pa滥rt色it泻io但n,膛进入坐过程技ex禽ch韵an骂ge半…。

枪梨图1偷0.刊15准给出界了进搏入过渠程e寒xc推ha命ng灵e之弯后运甩行栈霉的示锐意,饼我们皂仅把座存取怜链和乓控制碍链的猜值标顷明。架图栽10传.1仙5薯运行域栈歌可以闻看出沈,过伙程e探xc游ha多ng什e由锹过程可〔函径数〕档pa柔rt摸it尊io屈n调临用,爪但e皂xc轻ha他ng赠e的催直接指外层露过程睛是s富or损t,冠所以阻过程矿ex堪ch亚an孔ge掉的活刺动记脂录的炮存取迟链指焦向s节or量t的菜活动烟记录钳的始修址。检

龙杰另外患,过风程p债ar召ti冲ti神on晃中引概用了歌第(菠2)繁行说浴明的园变量游a,债而p偏ar螺ti叮ti钉on管的直兆接外而层是疫qu家ic欣ks旁or疾t,换qu惯ic罗ks菠or蓬t的重直接傍外层所过程弊是s末or宿t,戒pa纽rt特it狮io绿n对勿非局稼部量异a的甜引用绍通过谷两次卷拉链慰实现军。剧另外御一种淹存取软非局雕部变袋量的推方法犹,也思是常基用的爪有效敲方法膊。即简每进食入一恒个过科程后访,在长建立最它的今活动均记录路的同蚕时建达立一塔张嵌骡套层阅次显胀示表还di垦sp嘉la找y。

隶令这里鱼所提雪到的桌"嵌昂套层超次"霉,是境指过倘程定慰义的贤层数石,始毫终假窑定主得程序蛮的层全数为杂0,篇因此全主程柿序称塔为0抚层过挑程。趟如某板过程骨p是脊在层灯次为外i的悔过程郊q内与定义窄的,效并且严q是购包围宴p的购直接工外层箭,那须么p霜的过生程层夕数为史i+汁1。线一般冶编译捏程序松处理形过程纱说明抢时,兄将把廊过程俱层数正作为体重要船的属喜性登榴记在衬符号峰表中尺。计贩数过传程的游层数关很容丈易实盲现,待用一径个计免数器肤Le客ve皇l,普初值独为0约,每以遇到私过程姥说明哭那么增常1,符过程维说明份结束保那么减脾1,极PL斑/0似编译淘程序条就是转这样勿处理钞的。墓di殃sp沾la疑y是刮一个左指针响数组厨d,既也可虚看做肌是一麻个小手栈,晚自顶择向下驻每个败单元膝依次盖存放染着现谎行层踩,直避接外俘层,脉……权直至授最外库层〔带0层父,主猎程序弯层〕惭等每立一层妇过程普的最仪新活茅动记醋录的恩地址著。也折即,挺嵌套呢层次捉i的耍过程朽的局惠部变充量a辅是在雾由d蚀is潮pl湖ay关元素孔d[诉i]修所指佛的那者个活通动记朵录中丈存放蹦的。刊也就渠是说防,嵌行套层秒次i狭+1页过程李中的蚂非局略部变牧量可演能在已i,冷i-魔1,握…,草0层咐,对带它的药存取牛是通掌过d伸is增pl谷ay萍元素画d[却i]匪,d驶[i纹-]尺,…传,d柿[0站]而捎获得连的。

恭曲假定狼现在传进入嫌的过驱程的芳层数葵为i荒,那么寇它的座di斜sp湖la密y表蹈含有芦i+伤1个茶元素眼,依责次指封向现渔行层疾、直尘接外宏层…至…直厦至最熔外层屿〔0忽层〕超等每榨一层衔过程钳的最约新活轰动记捧录的笋地址缸。例促如图逝10胀.1门1的苗程序响,假亮定有蛇如下抛四种串调用弄情况说:(芬a)绑so证rt隔→q棍ui香ck纺so裁rt府…;锄(b赌)s合or牵t→只qu刑ic旱ks室or餐t→两qu珍ic累ks理or皂t…缺;(弟c)烂so压rt胡→q示ui浓ck顾so粗rt拢→q蒜ui摄ck见so躺rt吸→p刘ar桐ti矛ti拉on企…;绸(d关)s弱or窃t→厚qu熄ic恶ks呀or筛t→糟qu美ic浅ks目or毙t→兵pa爆rt僵it北io始n→外ex班ch赶an穗ge窝…。个那么图误10户.1释6的厦〔a厦〕,却〔b稿〕,发〔c婚〕,蓬〔d碎〕分辛别说香明了戒上述矮四种华情形半的运血行栈够和d伏is碎pl刻ay瓜。确惑实看歉出,摩di智sp旧la挎y显貌示了躬存取乌链的霉信息见。市图粱10吹.1腔6棍di荡sp由la田y表串di煎sp六la榆y本痛身的颤体积虾在编遥译时岛可确洒定。都至于狸di途sp洽la通y本砖身作动为单育独的蜓表分矛配存抽储,顿还是坏作为屈活动庄记录肤的一浩局部凑,比陡如置厕于实倚参〔往形式炎单元背〕的杰上端驶〔如匙图1旷0.还17扎所示催〕,轧那么取映决于驾编译锄程序热的设虚计者雄。

肥献假定磨将d迫is还pl钩ay讨作为索活动择记录敢的一讯局部扑,由叉于每图个过膝程的惭形式稿单元金数目戒在编拨译时垃是知刊道的势,那冬么d葬is升pl圆ay陕的相问对地举址d产〔相汽对于茶活动屑记录犯起点哀〕在瓜编译耽时也绩是完租全确喇定的案。因竿此,犬假设现奔行过已程中刊引用香了某皇一外涌层过额程的螺变量榆,那么丢很容研易生贴成相欣应的厉存取影指令蠢。叫现在婚我们蚁要讨单论,烧当过班程P陶1调订用过纹程P喷2而垫进入迈P2稀后,族P2赢应如揪何建距立起匠自己店的d环is许pl材ay纲。为废了建叉立自网己的哪di资sp赛la互y,捷P2垄必须青知道佳它的玩直接勇外层悄过程针(记宵为P世0)另的d黑is裁pl遍ay赌。这敢意味旱着,场当P愉1调扭用P插2时祸必须置把P折0的采di放sp规la列y地浪址作驳为连衰接数婚据之幕一传兄给P症2。举图浇10浅.1商7丘di站sp收la闲y作旋为活右动记洞录的滨一部夕分滔图多10绒.1换8匪P1鼠调用祖P2送的两陪种不搜同嵌租套乐图辈10钥.1额8(双a)禁调泽用情次形一同昼酿图借10俊.1遭8(毅b)签调售用情毁形二上如果剩P2什是一僻个真娃实过熄程(僵P2渠不是罚形式牧参数割),病那么放,P俗0或步者就斑是P啄1自驾身或攀者既折是P戒1又计是P鱼2的非直接针外层曾(见蚂图1市0.面18烟的(嫩a)恒、(啦b)置两种附情形卧)。庭不管唐哪一黄种情纵形,齿只要希在进艳入P苏2后同能够赠知道劫P1住的d雕is厉pl窜ay及就能版知道善P0霞的d纷is岂pl绑ay唉,从县而可男直接环构造及出P欠2的党di霞sp秧la舱y。

维孝事实愤上,说只需城从P垂1的凶di迅sp知la室y中静自底勤而上灭地取脸过l宗2畏个单袭元(室l美2抽为P很2的功层数绒)再昆添上兴进入再P2绣后新郊建立研的S敲P值煮就构计成了湿P2迟的d糠is京pl诵ay宣。也险就是煤说,屿在这怎种情往况下唯,我慕们只辉需把侦P1稳的d崇is显pl澡ay委地址币作为挖连接算数据寇之一秧传送肤给P丘2就翻能够近建立导P2培的d淘is吼pl脾ay涛。

某浩如果芝P2鞋是形掩式参截数,顽那么趁,调练用P惩2意旬味着断调用状P2圾当前熊相应逐的实因在过绢程。专此时罪的P炭0应悼是这部个实施在过顺程的护直接耐外层耐过程榴。我嗽们假防定P矮0的浪di节sp修la零y地附址可倦从形悦式单享元P蜻2所敲指示能的地夜方获夸得。

锯纸为了柏能在猫P2辽中获铁得P慧0的匠di虽sp停la撑y地施址,织我们盐必须事在P忍1调拜用P爽2时让设法坝把P纯1的徐di栗sp真la陷y地眼址作敢为连臭接数优据之呼一(纪称为梯"全向局d题is甘pl耕ay煮地址题")笑传送友给P怪2。农于是冷连接悔数据目变为穿三项勺:

质弃(1娃)忘老S死P值例;

绘仙(2橡)照返回劳地址掏;

脸脊(3忠)坡全局绩di径sp厅la击y地挡址。

聪射这样蓄,整援个活滋动记虽录的散组织放就如挽图1砍0.税17固所示终。

饲澡注意骨,0寺层过校程〔船主程苏序〕郊的d女is江pl逢ay脖只含茶一项脉,这军一项础就是塘主程巩序开腾始工滨作时挡所建搜立的伴第一仁个S炒P值盘。讲10甘.3滑参老数传写递血当一都个过戚程调去用其品它过铺程时包,调密用过遮程和伯被调表过程存之间巴的通胖信经富由非喇局部偏量或京者经森由参路数传钻递。科如图灰10火.1航9的她过程患ex汽ch巨an穷ge俯l既羡使用掠了非镜局部首量数仍组a榴,又丈使用敏了形罗式参乒数(奖简称鸣形参伐)i用和j闪,将欠a[莫i]纲和a忧[j况]的穿值进夹行交售换。图10.19带有非局部变量和形参的PASCAL过程(1)procedureexchangel(i,j:integer);

//过程exchangel的头,带有形式参数i,j

(2)varx:integer;

(3)begin;

(4)x∶=a[i];a[i]∶=a[j];a[j]∶=x

//数组a是非局部变量

(5)end;草怪语句淋ex率ch竭an令ge少l(斧m,篇n)惠;表投示了迟对图辛10输.1钞9中惨过程价ex群ch维an极ge午l的薪一次蝶调用求,其朴中m悉,n认为实绸在参慎数,巾简称具实参善。我巷们所磁讨论撇的问角题是透,为夏执行勤ex舌ch暖an秋ge过l(类m,津n)蓝,形誓参i祝,j行应按祥何种舍方式杨同实统参m侵,n幕相联岸,换据句话昂说,苦如何敞把实串在参嫁数传跳递给他相应驴的形随式参延数呢访?有房几种浩形实视参对突应的划方法拦,分盗别称塑作值茎调用瓶,地逐址〔柳引用迹〕调妖用,恳名字落调用鸟以及祥宏扩根展。牺也就召是说披,参算数传少递的存几种嚷不同虽途径氧是传兔值,厚传地杂址,再传名拢及宏线扩展摸等等愤。

挖品知道溜一个回语言加使用融的参著数传秩递的备方法砌非常暂重要猜,因亮为一希个程架序的峡结果像依赖界于所徒使用岔的方矩法。碍观察元图1仆0.畏20缎的P雹AS元CA但L程藏序。嗽我们纯知道中该程兴序的分输出润是a肉=2昨,b失=1商如果桌将第宜3行滥的关乒键字气va踢r去柱掉,伯那么该钞程序组的输台出是连a=率1,鼠b=五2。图10.20带有过程swap的PASCAL程序(1)programreference(input,output);

//reference过程定义头

(2)vara,b:integer;

(3)procedureswap(varx,y:integer);

//reference过程内定义的swap的过程

(4)vartemp∶integer;

(5)begin//swap的过程体

(6)temp∶=x;

(7)x∶=y;

(8)y∶=temp

(9)end;

(10)begin//reference的过程体

(11)a∶=1;b∶=2;

(12)swap(a,b);

(13)writeln(a=,a);writeln(b=,b)

(14)end.米拒有关咸键字衣va绝r时前,P出AS如CA作L语栗言的妥参数杰传递粉使用们的方稻式是织传地抱址;敢去掉惧va箩r,才那么使祥用的忆方式杰是传端值。

素会PA许SC宁AL克语言桶的变肆量参泥数是混在参相数前犁加关滩键字床va喇r。永这种聚参数敌的传叶递方锋式是伸传地杯址

致歼例如肯:过萄程耻sw语ap家(v虚ar跳x剖,y管:i岭nt柳eg固er脊);

五稀卧s底wa逆p(陶a,时b)苦;(纸a,地b为粱调用迟时的泥实参脆)调置用结纳果:激a,雀b的变值被舞改变铸。

折榜在参起数前丛不加径关键只字v螺ar厨时是五值调区用。充这种犯参数姿的传穿递方牲式是昏传值雄。

箱猜例如音:过爪程捞sw缺ap屿(x疾,y什:i惠nt榆eg驾er醋);

备离栋s休wa栽p(际a,猫b)池;其看结果炒:a琴,b侦调用置前的痕值不勾被改漏变。哈10裕.3跟.1谎传寸值

离目现在福讨论慰传值必的实桐现。左传值处,即制ca密ll省b瞒y仁va忠lu螺e,铃也称怖值调寄用。裳这是闸最简匹单的可参数伐传递索方法转。具隙体来锐讲是宏这样西的:趣①逼在被袜调过登程的权活动浆记录袍中开牛辟形秀参的融存储圆空间铁,这丙些存益储位桨置即滑是我栋们所两说的寨形参缝或形风式单寺元。

斗吴②涌调用圈过程删计算滩实参碗的值细,并月将它湾们的踩右值酒〔r育v团al壮ue爪〕放胸在为桌形式量单元卖开辟匙的空象间中茂。

沉访③蜂被调施用过辛程执丘行时衔,就羊像使柿用局纪部变垄量一腐样使遍用这触些形隐式单材元。

歪径在图稻10辅.2熄0程慈序中彻,第送12传行s台wa祖p〔嘱a,扩b〕牧调用乱过程殃将不繁会影兄响a屋和b削的值须。其贩结果男等价狗于执悼行下煮列运鼓算:

榨稳x际∶=究a

翅速y停∶=仿b

监伞te符mp宗∶慨=x

诸贪x鼠∶=炼y

咽盼y瞎∶=玩te老mp

犹这里丽,x而,y响和t轰em醉p局舱部于膨sw再ap衬,虽虏然赋竟值改膀变了璃局部斤量x瓶,y厅和t组em目p的捷值,欣但当率控制把从该均调用切返回焦而s柳wa燥p的却该活闻动记杀录释扩放后础,这隙些改游变即妻消失漂,这笋种调叉用方蜓式不屡影响镜调用静过程蜜的活浆动记睛录。恐10短.3桂.2病传两地址

普争当参东数通芦过引轮用传莫递时寄,也狠称作事传地根址,饲或引浸用调舅用。究调用档过程陶传给失被调狸过程哗的是峰指针俱,指怕向实涨参存陷储位斩置的侵指针院。不1.辽如困实参者是一蛛个名们字或短是具济有左唤值的撤表达躺式,械那么左融值本驻身传甩递过铜去。

怠奴2.未如僚实参代是一纯表达扎式,子比方反a+迹b或晒2,甜而没突有左奔值,继那么表衫达式连先求骂值,西并存遮入某固一位天置,达然后魂该位帽置的戴地址妖传递括过去跨。

象延3.巩被喉调过晌程中劈对形救式参言数的蒸任何诱引用伏和赋父值都钳通过奔传递熄到被谱调过秤程的疤指针静被处忽理成慨间接隶访问有。

盈慈例如玩,在逆图1剩0.事20雁的程脊序中轻,假设古用实息参i服和a药[i室]对拌过程幻sw针ap本进行兵调用窄,即秘sw掘ap粪(i陵,a昼[i播])农,其原效果倦如下搁步骤怨所述侮:

纠笔1.诸将朽i和朗a[块i]超的地活址(阁左值份)拷隔贝到跨被调冷过程韵的活辞动记页录中级,比贞如说捷分别谨对应述形参恼x和渗y的坑单元五ar衡g1寇和a耻rg暗2。

纺跑2.玩将撕局部誉变量闷te丧mp能设为剃由a级rg精1所赠指单致元的戏内容帖(即碧令t摇em浙p等际于i叛0功,其谨中i详0叹是i柳的初炊值)闹,这题一步卧对应悔于s雷wa件p定淹义中再的第悉6行美语句屠:t馆em馒p∶收=泻x。

羽讯3.绝将堤ar帜g1剪所指慢单元常的内骆容设授为a疏rg誓2所拆指单万元的牛值,势即i本∶=桑a[滑i骂0惭],蛾这一效步对趁应s眼wa述p中杰第7师行的巧x∶尝=y觉。

顺抄4.絮将右ar嫩g2混所指乓单元夸的内励容设锤为等晨于t孝em君p的席值,酬即,号设a战[i碎0唇]=苍i,狂这一始步对治应y兵∶=饭te凤mp劲。

箩促通过辨值调番用的泪过程辜可以壁由非响局部葛量或炉由指冒针而谨对调慕用过灵程发鞋生影身响。廉比方山图1先0.菌21灭的C狸程序慌中,拣x和僻y声哄明为岗整型阁指针辩(在镰第2岗行)诱,第隔8行害调用柄sw兄ap鬼(&欺a,崇&b使)中糠的&崖操作贷符导磁致将逼指向道a和示b的咽指针喷传给注过程法sw狮ap释。该满程序颜的输采出为桐:哗

紧式a朱is融n访ow迎2抱,佣b鹿is雕n落ow混1

陵层该例度中指镜针的辱使用仇恰好尸提示建了一蛙个编骆译程原序怎泄样实俩现引各用调谷用。图10.21在一个值调用过程中使用指针的C程序(1)swap(x,y)//定义swap过程

(2)int*x,*y;

(3){inttemp;//swap的过程体

(4)temp=x;x=y;y=temp;

(5)}

(6)main()//主程序

(7){inta=1,b=2;

(8)swap(&a,&b);//调用swap,其实在参数是a和b的地址

(9)printf("aisnow%d,bisnow%d\n",a,b);

(10)}欺阿C语遮言过站程的贿参数炸只有汉值参久,要苹实现静传地口址可海采用敲传递丛指针寿型实妨参。

专辛除了誓传值提和传衔地址袋两种胜参数谨传递口方法粒之外猛,还胡有"袄得结胜果"副(v惰al料ue耐r云es逼ul跨t)廉,传嚼名c话al墓l推by站n养am禾e等巴等。航这里刃我们勤不予倦讨论巧。粥10格.3誓.3井过隙程参独数

晶丰一个碑过程胁(函错数)盼可以阀作为肠参数焰传递见,比粘如图料10拣.2酿2的侦PA仓SC揉AL虽程序脖中,券过程宫c把惨f作口为参艇数传裂递给筑b,互而b桨通过眨引用塔形参绪h调雨用f眼。我侦们要派注意桐的是芽:函母数f五有一园非局洒部量枣m,筑图中郊特地胃将m安圈起炕来。太但m烟的作坦用域虎并不陶包括岭b的险过程愁体。假设b中唉的语瓜句w逃ri障te敏ln斗〔h租〔2羞〕〕经激活赤f,愤是因得为形趟参h云引用知f,共wr朱it们el瞒n打限印的电是调造用f慕〔2社〕的您结果悼。那著么b叼激活泼f时尽,怎绒样设宪置f乐活动咽记录钻的存殊取链里〔d交is柜pl贱ay提〕呢意?答乞案是忽,当骨一个圾嵌套惹过程丧作为炎参数绿传递雷时,蜡必须用连同糕它的程存取扰链〔控di惕sp另la方y〕觉一同舍传递觉过去挡。图铁10拘.2强3说船明了岭这点搜,当腰过程夫c传义递f勿时,泊c可酱以决禽定f晕的存凶取链锁,或帽者说克f的残存取飘链或病di会sp碍la谱y可级以根薯据c贩的存而取链戏或d非is染pl冲ay确来建道立。镰c必测须把膀f连荷同f振的存输取链笼一起食传给仙b,稿那么蝇在b已中激羊活f勾时,筹b活沟动记炊录的东存取怠链就其可以卵正确晌设置塘了。图10.22嵌套过程作为参数传递(1)programparam(input,output);

//例程param的头

(2)procedureb(functionh(n:integer):integer);

//嵌套过程b的头,其形式参数是一个具有一个整型形参n的整型函数h

(3)beginwriteln(h(2))end{b};//b的过程体

(4)procedurec;//嵌套过程c的头

(5)var:integer;

(6)functionf(n;integer):integer;

//过程c中嵌套定义的具有一个整型形参n的整型函数f

(7)beginf∶=+nend{f};//f的函数体

(8)begin∶=0;b(f)end{c};

//c的过程体,其中b(f)调用b函数,

//而实参是函数f,调用时替换形参函数h

(9)begin

(10)c

(11)end度图1臣0.蛙23双连狐同存流取链闹一起辱传递瓣过程己实参走一般姻来讲砖,过坚程P砖把过溜程T尤做为鬼实参愤传递在给Q匪时,秀也是欢一种府"传视地址笔"方晒式,美P可稍以先讽建立范两个克相继驻的临瓶时单办元,粪第一州个单摘元B贱1存尼放过溜程T默的入芝口地缸址;靠第二崇单元腿B2畅存放尖现行牌di雀sp宰la坚y地念址或旷存取术链地钩址。胡然后怠把第恒一临往时单沃元地款址传换送给握Q〔多即放余置于果Q活虑动记峰录的悠形式馅单元血,比帅方说亮Z中等〕。坡假定菌过程瑞Q执赞行到先引用膨形参税Z时换,Z提中已写含有沫上述盛B1三的地涌址,奏那么B誉1的畜内容涛将用宇来作视为转雁子指药令的决目的程地址掘〔即从转进枝过程题T〕饱。B省2的揭内容拳将传叼送给围T。

象蜘除了典实参戏是过守程的盏情况野外,姥还有牙实参暴为数霜组的暴情况闸,实膏参为结标号出的情羽况以竭及实斜参为哨形式巴参数订的情笔况。违我们亦不再矿讨论祖。110.4过程调用、过程进入和过程返回经过上述讨论之后,我们归纳一下,对于过程调用的四元式序列:

parT1

parT2

parTn

callP,n

在运行时是如何执行的。或者说,对于par和call应产生什么相应的目标代码?前面讲过,过程活动记录中有形式单元,形式单元与活动记录起点之间的距离是确定的。因此对于parTi(i=1,2,…,n)的处理是:根据parTi(i=1,2,…,n)中Ti的种别而生成传送指令,或将参数的值或将参数的地址传送至新的过程的活动记录的形式单元中。

对于callp,n那么应生成传送参数个数n的指令;保护现行SP至新过程的活动记录〔老SP〕;转子,转向P的第一条指令;定义新SP;保护返回地址;定义新值;填写display或存取链内容等指令。

如果过程含动态数组〔局部〕,那么应生成对数组进行存储分配的指令,即生成运行时动态地建立内情向量和分配数组空间的目标指令〔内情向量表区已分配在过程活动记录中〕。这些指令主要完成计算各维的上下界,计算

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论