版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章目标程序运行时的存储组织30:第一节数据空间的三种不同使用方法和管理方法:第二节:第三节:第四节栈式存储分配的实现参数传递过程调用、过程进入和过程返回 8. 1数据空间的三种不同使用方法和管理方法:从逻辑上看,代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配 :数据空间包括:用户定义的各种类型的数据对象(变量和常量)所需的存储空间,作为保留中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,组织输入输出所需的缓冲区:运行时的存储区常常划分成:目标区、静态数据区.栈区、堆区:图81就是一种典型划分:8:型划分A代码区用以存放目标代码,这是固定长度的,即编译时 能确
2、定的A静态数据区用以存放编译时能确定所占用空间的数据A堆栈区用于可变数据以及管理过程活动的控制信息:编译程序分配目标程序运行时的数据空间的基本依据是 程序语言设计时对程序运行中存储空间的使用和管理办 法的规定:在程序设计语言语义学中,使用environment表示将一个 名字映射到一个存储位置的函数,state表示存储位置到 值的映射,如图8.2所示:environmentnamestatestoragevalue8.2 名字到存储、到值的映射:数据空间的使用和管理方法分成三种:A静态存储分配A栈式动态存储分配A堆式动态存储分配一 静态存储分配:静态存储分配:在编译时能确定目标程序运行中所需的
3、 全部数据空间的大小,编译时安排好目标程序运行时的 全部数据空间,确定每个数据对象的存储位置:如像FORTRAN程序是段结构的,如图8.3所示: 图& 3 FORTRAN程序构成特点图84给出一个FORTRAN77的程序例子:(I) PROGRAM CNSUMECHARACTER * 50 BUFINTEGER NEXTCHARACTER C, PRDUCE(5) DATA NEXT /l/, BUF lu/(6) C=PRDUCE()(7) BUF(NEXT: NEXT) = C(8) NEXT=NEXT+1IF (C EN)GOTO6(10) WRITE ( * /(A)f)BUF(II)
4、 END(12) CHARACTER FUNCTION PRDUCE()(13) CHARACTER * 80BUFFER(14) INTEGER NEXT(15) SAVE BUFFER, NEXT(16) DATA NEXT 781/(17) IF(NEXT GT. 80)THEN(18) READ ( */(A)z)BUFFER(19) NEXT=1图&4(20) END IF)PRDUCE= BUFFER( NEXT: NEXT)(22) NEXT=NEXT+1(23) ENDCNSUME 的 CodeJIdePRDUCE 的 GockJLCHARACTER *50 BUF INTEG
5、ER NEXT CHARACTER CSTATIC DATACHARACTER 80 BUFFERINTEGER NEXT图& 5 FORTRAN 77的静态存储分配二动态存储分配:如果一个程序设计语言允许递归过程、可变数组或允许 用户自由申请和释放空间,那么,就需要采用动态存储 管理技术三栈式动态存储分配:这种分配策略是将整个程序的数据空间设计为一个栈四堆式动态存储分配:假设程序运行时有一个大的存储空间,每当需要时就从 这片空间中借用一块,不用时再退还,由于借还的时间 先后不一,经一段运行之后,程序运行空间将被划分成 许多块,有些占用,有些空闲。那么当运行程序要求一 块体积为N的空间时,需要
6、决定应该从哪个空闲块得到这个空间理论上讲,应该从比N稍大一些的空闲块中取出N个单元,以便使大的空闲块派更大的用场,但实现难度很大:实际中常常釆用的办法:先遇到哪块比N大就从其中取出N个单元:即使这样,也会发生找不到一块比N大的空闲块,但所有 空闲块总和比N大得多,这时,有的分配管理系统采用废品回收的办法来应付82栈式存储分配的实现:过程的活动记录AR(Activation Record):是一段连续的存储区,用以存放过程的一次执行所需要的信息,这些信息如图6所示:图8.6 过程的活动记長A临时工作单元:如计算表达式过程存放的中间结果A局部变量:一个过程的局部变量A机器状态信息:如程序计数器、寄
7、存器的值A存取链:用以存取非局部变量A控制链:指向调用该过程的那个过程的活动记录A实参:由调用过程向该被调过程提供实参的值(或地址)A返回地址:保存该被调过程返回后的地址简单的栈式存储分配的实现:最简单的程序设计语言结构如图107所示:program main;全局变量或数组的说明; proc R;end (R); proc Q; F end (Q); 主程序执行语句 end(main)8. 7 过程定义不嵌套的程序结构:例如,图8.7的程序结构中,若主程序调用了过程Q, Q 又调用了 R,在R进入运行后的存储结构如图10.8(a)所示::若主程序调用了过程Q, Q递归调用自己,在Q过程第2次
8、 进入运行后的存储结构如图10.8(b)所示::若主程序先调用过程Q,然后主程序接着调用R,且Q过 程没有调用Q和R,这时Q和R进入运行后的存储结构分别如图8.8(c)和8.8(d)所示:TOP R的活动SP _一记录0的活动记录主程序全局数据区0的活动 记录0的活动 记录主程序全局数据区0的活动记录主程序全局数据区/?的活动记录主程序全局数据区(c)栈式存储分配(d)TOPSP常常使用两个指针指示栈最顶端的数据区:ASP:总是指向现行过程活动记录的起点 TOP:始终指向已占用的栈顶单元:这种语言若含有可变数组,则其过程活动记录的内容如图&9所示:临时工作单元 局部数组的内情向量 局部简单变量
9、 卖参(形式单元)参数个数返回地址控制链(老图89无嵌套定义的过程活动记录内容:图810表明分配数组区之后的运行栈情况,可以与图TOPSP的数组区0的活动记录主程序全局数据区里810分配了数组区之后的运行栈二嵌套过程语言的栈式实现Pascal言程序结构的特点是允许过程嵌套定义,如图11所示:(1) program git (input, output) 4(2) var a: array 0 10 of integer;(3) x: integer;(4) procedure read ar ray;var i: integer;(6) begin-*目endTcadarray;(7) pro
10、cedure exchanged; integer);(8) begin(9) x : = a订;aij 5 = aj ; aj 5 = x(10) end exchange;(11) procedure quicksort(m,n: integer);(12) var kv; integer; quicksort的ARJa scm的 AR图8. 13 嵌套定义过程的活动记录和存储栈:因为PL/O的过程是无参过程,PL/O也无动态数组,所以它的过程活动记录的内容如图&14所示:TOP临时工作单元,局部变量返回地址控制链(动态链)存取链(静态链)SP图8. 14 PU0编译程序的堪程活动记录:再
11、回到图811例子,如果该程序的某次执行顺序为:sort quicksort quicksort partition exchange* :图8. 15给出了进入过程exchange之后运行栈的不意,仅标明存取链和控制链的值TOP存取链控制链、局部变量GJ存取链、控制链局部变存取琏控制链局部变址ke存取链、控制琏、变量d ,工SP exchange的活动记录运行栈26:另一种跟踪方法是:每进入一个过程后,在建立它的活动记录的同时建立一张嵌套层次显示表display:嵌套层次:指过程定义的层数,始终假定主程序的层数 为0,因此主程序称为0层过程:计数过程的层数用一个计数器Level,初值为0,每遇
12、到过 程说明则增1,过程说明结束则减1:-display是一个指针数组d,也可看做是一个小栈,自顶向下每个单元依次存放着现行层,直接外层,直至最外层(0层,主程序层)等每一层过程的最新活动记录的地址:图8.11的程序,假定有如下四种调用情况: (a) sort quicksort (b) sort quicksort Miuicksort* (c) sort quicksort quicksort *partition# (d) sort quicksort quicksort partitionexchange* 图& 16 (a) -(d)分别说明上述四种情形的运行栈和display29d
13、Cld0diSplfly TOPquicksort 的 活动记录=n I13sort 的 活动记录(a)TOPdisplay 广sp quicksort(现行)活动记录quicksort 的1第一次进入) 活动记录sort 的 活动记录29(b)TOP 一partition 的2dld0display活动记录quicksoFt 的活动记录quicksort 的活动记录sort 的 活动记录(C)图 8. 16TOP exchange活动记录dlprints11 %d Mdn% a, b);图8. 19C程序中的分程序:分程序结构可以用栈式存储分配实现A种办法是把分程序看成一个“无参过程”,只不
14、过是 在该分程序入口处调用,分程序出口处返回。分程序在哪里定义就在哪里被调用A另一种办法是每次为一个完整的过程体分配存储,即把 一个过程体中的所有分程序所需的存储一次分配好,如图8.19的C程序,可以为这里所有声明的名字分配一块存储,如图8.20所示:0 8.20 为图8- 19中程序的名字分配存储ALGOL的结构特点是除了允许过程嵌套定义还含有分程 序的结构,如图821的一个ALGOL过程:procedure A(m 山); integer m.n;Bl - begin real z; arrayB2S begin real d,e;L3:end;B4: begin array (:1: m
15、;B5: begin real e;L6:end;end;L8: end;图8. 21 一个ALGOL分程序结构:如采用将分程序看成“无参过程”,则效率很低,因为A第一,分程序不存在被调用的问题,不必要在进入一个 分程序时,将连接数据和display都放进活动记录中A第二,当从内层分程序向外转移时可能同时要结束若干 个分程序,那么怎样恢复所要到达的那个分程序的数据 区呢?:克服上述缺点的办法是:A首先,代替原来的那个统一的栈顶指示器,让每个过程 和分程序都有自己的栈顶指示器TOP,它的值保存在各自的活动记录中A其次,不把分程序看作“无参过程”,而让每个分程序用包围它的那个最小过程的displa
16、y :每个过程的活动记录所含的内容有:1.过程的TOP单元,指向活动记录的栈顶位置2 连接数据: 老SP值返回地址全局d isplay地址调用时的栈顶单元地址,称作老TOP3.参数个数和形式单元444.display 表5 .过程所管辖的各分程序的局部数据单元对每个分程序来说,它们包括:(1) 一个名为TOP的单元,当进入时它含现行栈顶地址,以后 用来存放栈的新高度(2) 分程序的局部变量、数组内情向量和临时工作单元:图&22给出了过程A (见图10.21)的活动记录的结构:变血变量a和阳的TOP数组C的内情向址叭的TOP心的TOP数组E的内悄向!ft变量三B 的TOPdisplay形式单元価
17、UJ参数个数:2调用时的栈顶地址(老TOP)全局D1SPLAY地址返回地址老SP过程的TOP,指向活动记录之顶一图8.22 过程A的活动记录:下面用一个例子说明进出分程序时数据区的变化过程:A图8.23 (a)表示已调用了图10.21的过程A,控制已转入A中,但尚未开始执行过程体时栈的内容A图8.23 (b)反映了已进入过程体分程序(B1),但尚未 分配数组空间时栈的内容。分程序B1的TOP值直接抄自外层分程序的TOP单元A图8.23 (c)反映了分配数组B后的情形,此时B1的TOP 值上升到指示新栈顶,但过程人的丁0卩值不动A图8.23 (d)反映了进入分程序B2之后的情形1!A进入分程序B
18、4时又抄写Bl的TOP,并对数组C进行分配, 于是得到图8.23 (e)A当进入分程序B5时,再次抄写直接外层的TOP值,得到图823 (f)数组BB的内悄向尽E的内悄向鼠2Z切的TOP-的 TOPdisplaydisplaydisplay形武单元形氏单元形式单元2mnm川22连接数据连接数据连接数据ATOP -A的TOP 月的TOP -(a)(b)(c)数组Q数组C数组8数组左数组Ef-*1e屍的TOP-*1edC的内怕向量C的内悄向址血的TOP血的TOP-旳的TOP8的内 tffJnjR8附内悄向最3的内怕向最zZZ& 的 TOP-Q的TOP-也的TOP*displaydisplaydis
19、play形式单元形式单元形式单元m, nm nm .n222连接数据连接数据连接数据月的TOF -兄的TOP 一月的TOP -1(d)(e)图8. 23 分程序结构数据区变化图到达标号B处;(b) s*程序Bi; (O数组B分配之后;(小进入分程序民;3)进入分程序5分配数组C之后)(f)进入分程用民:把实在参数传递给相应的形式参数方法:A传值、传地址、传名、传结果等一传值(值调用):将实参计算出它的值,然后把它传给被调过程:1 形式参数当作过程的局部变量处理2调用过程计算实参的值,并将它们的值放在为形式单元开辟的空间中3被调用过程执行时,就像使用局部变量一样使用这些形式单元 :传值的重要特点
20、是对形式参数的任何运算不影响调用过程的活动记录中 实参的值:通过值调用的过程可以由非局部量或由指针而对调用过程发生影响二传地址 :当参数通过引用传递时,也称作传地址,或引用调用 :调用过程传给被调过程的是指针,指向实参存储位置的指针1如实参是一个名字,则名字的地址传递过去 2如实参是一个表达式,比如a+b或2,而没有左值,则表达式先求值,并存入某一位置,然后该位置的地址传递 过去3被调过程中对形式参数的任何引用和赋值都通过传递到被 调过程的指针被处理成间接访问二传名 :当参数通过名字传递时,也称作传名调用:调用过程传给被调过程的是名字,实参名字代替形参名字1如实参是一个名字,则名字直接替代相应
21、的形式参数2如实参是一个表达式,比如a+b, a+b替代相应的形式参数 3被调过程中对形式参数的任何引用和赋值都通过传递名字到被调过程的指针被处理成间接访问二传结果:调用过程传给被调过程的是指针和值,每个形式参数对应两个单元,一个存实参的地址,一个存实参的值。1如实参是一个名字,则名字的地址和值传递过去2如实参是一个表达式,比如a+b或2,则表达式先求值, 并存入某一位置,然后该位置的地址和值传递过去3调用结束前,再将执行的结果写到对应的实参单元例:对于下面程序:Procedure p;begin y:=y+i;z:=z+x;end;pbegina:=2;b:=3;p (a+b,a,a)pri
22、nt aend.若参数传递的方法分别为(1)传值(2)传地址(3)传名(4)传结果。执行时所输出的a分别是什 么?54(1)传值.则将实参的值传递给被调用者P 程序运行时有(假设a的地址 为add_a, b的地址为add_b);被调用者数据区xyZ :调用者数据区add_a 2add_b 3临时单元T: 5程序运行执行了语句“y:=y+l”后有:调用者数据区add_a 2add_b 3临时单元T: 5被调用者数据区532程序运行执行了语句“z:=z+亡后有:调用者数据区add_a 2add_b 3 临时单元T: 5 所以程序输出2o被调用者数据区53(2)传地址,则将实在参数的地址传递给被调用
23、者,p运行时有(假设a的地址为add,b的地址为add_b ); 调用者数据区被调用者数据区add_b:3临时7CT:5(a + b)的值T add_a add_a调用者数据区被调用者数据区add_a 3add_b 3临时单元T: 5执行了语句“z:=z+x”后有:调用者数据区y: add_az:add_a被调用者数据区add_a 8 add_b 3 临时单元T: 5 所以程序输出8。Tadd_aadd_a程序运行执行了语句“y:=y+l”后,有:解:(3)传名当执行调用P ( a+b, a ,a)时,相当于被调用者被替换成 procedure p (a+b,a,a)begina:=a+l a
24、:=a+a+b end; p调用者的数据区为:a:2b:3执行语句“a:=a+l”后,调用者数据区为:a:3b:3执行语句:a:=a+a+b后,调用者的数据区为:a:9b:3因此程序输出为9。(2)传结果,则将实在参数的地址和值传递给被调用者,P运行时有(假设a的 地址为add_a, b的地址为add_b,临时单元T的地址为add_T);被调用者数据区调用者数密区add a:add b:x: T5y : add_a2z:add_a2临时单元T:(a + b)的值工士调用者数据区add a:程序运行执行了语句“尹賞近虛反 被调用者数据区add b:临时单元T:x: T 5 y: add_a 3
25、z: add_a 2执行了语句“z:=z+x”后有:调用者数据区 add_a:2add_b:3临时单元T:5被调用者数据区x: T5y: add_a3z: add_a7调用结束前,被调用者数据存放到对应的调用者数据单元即:调用者数据区1调用者数据区add_a:7add_b:3临时单元T:5y: add_a3z: add_a7所以程序输出7O60过程调用、过程进入和过程返回:对于过程调用的四元式序列:/par T/par T2call P, n:在运行时是如何执行的? /par和call产生什么相应的目标代码A对于par(i=l,2,n)的处理是:根据parTj (i=l,2v.,n)中的种别而
26、生成传送指令,或将参数的值或将参数的地址传送至新的过程的活动记录的形式单元中:对于call p,n则应生成传送参数个数ii的指令;保护现行SP 至新过程的活动记录(老SP);转子,转向P的第一条指 令;定义新SP;保护返回地址;定义新值;填写display或 存取链内容等指令:如果过程含动态数组(局部),则应生成对数组进行存储分配的指令,即生成运行时动态地建立内情向量和分配数 组空间的目标指令:在过程执行语句的工作过程中,凡引用形参、局部变量或 数组元素都可根据过程活动记录起点的相对位置访问当过程P工作完毕要返回到调用段时,若语言有形如return(E)的返回语句,或P是个函数过程时,则可把已
27、算好的值传送至某个特定的寄存器中,调用段将从这个特定的寄存器中获得被调过程的结果值。然后所生成的目标指令则 应完成的工作是:恢复SP;恢复TOP,按保存的返回地址 实行无条件转移【本章小结】A目标代码运行时,存储区域的整体布局,以及各区域的作用A各种不同数据变量区的不同分配组织方式A允许过程嵌套定义的语言,栈式动态分配的组织管理A过程活动纪录的各项内容和它们的作用,以及活动纪录的组织方式参数传递的不同方式及其实现A过程调用和返回时,相应目标代码以及栈式动态分配区的管理作业1、下面的程序执行时输出的a分别是什么?若(1) 参数的传递办法为”传值”;(2) 参数的传递办法为“传地址”。(3) 参数
28、的传递办法为“传名”。(4) 参数的传递办法为传结果化 program main (inputoutput);procedure p(xz);beginy : =y+i;Z : =z+x;end; beginp(a+b 角 a); print a end.2、下面是一个Pascal程序program PP(input9output) var K:integer;function F (N:integer) :integer begin if N并已知在运行时刻,以过程为单位对程序中的变量进行动态存储 分配。试分别给出程序执行到(1)和(2)点时运行栈的内容和 DISPLAY的内容。67悬挂训络
29、:用,搭允许an肉在全个平面上糊动,同右保证史感谢您的下载,特赠送精品文章体能 训练技巧-TRX悬挂训练系统工作之余锻炼身体,若不需要请删除后使用,谢谢您的理解,祝您生意兴隆,事业高攣纺带是漬于美圭海军E忻给的雏形是以W度毛巾钊成的硼貝.后来.有F 叫兰迪史美圭磁决击血労諺官.在退役创新设计了该坯希络计划.变成民用的健界程TRX Si,练系沆,酢歩备3主要那分是竟1.5英寸.廳张力为1250融尼龙縄子,怅度范囲从6英尺谣笙至12英尺.总咬花手更适应戏手抓绸竝是轴卷挂等培毎纺动作.JC顿虫苦用于卡宾枪的咖4舸成.目3于谣盘.其目用不51)2S. 1分带號才挂妥当.決在袅子里便于捋带5!)1三何培
30、方.可至定在单乞t竝卡在门绳里.或系在树枝上.适合绝大冬加纺环境.女 吐砂竝昭球F8去雨肌肉印关节参与,稱打ifi更加结实的肌肉,稳定灵翻关节,魁的核心力量越正睛的席态,竜助在任何运动项目上获得更佳的运功表现,trx还是运动麼惑a侵手段之TRX动作慈:DiKQHt) :大.足力色大2抬起-址服,諭于砒更冬平拓力3.高支点国远.应吃力 7?诞定性旻疚应高罔田隹度:一塑向前軽有助于身依砌1. chest pre$s/fly combo(Wiy5fflS):人昔向纯子.手篙渥住绳子.双手坤玄.肘 保待一点弯签.斑一点点穹签,苯妙后一样竟.MS心如向前.用飙发力AW! 打幵双手并让宜音医刮90度停下.
31、再还原.唸后衣手打开傲飞屯.同时一却往BT踮2. chest press(M8S):人背向绳子手警握住绳子.双手停直肘保持一点音在.岛E一点点弯签.茸趣后一样竟.身体虽心血向前.用磁it力AWI打幵双手并让它弯惑SJ90度停下.再还原(淮度增E :欢提合井舞晔担旺期衣斜度眩0)3lunge fly弓步飞乌):1.手警渥住縄子,戏手玄,肘保待一点宵日,挺应收88身烷虽心恆向詡违.双手打幵狀g.丢时一算往前定垸 用卿发力.再还丘4. chest press single leg extended0t88-Sa2fflS):人背向绳子.手警握住绳子双手停直”肘保持一点弯签.择盖一点点弯签.-sates.-算向前抬起.MS心咖向前.用飙发力慢慢打幵双手并让它弯曲到90度停下.再歎1 还朕QD5. Suspended incline press-leg upQj孚上斜推抬脚):双知住地面.一同勺住绳子,诞定6Atomic push up(gHWSlS):或却住龙
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- OA系统面试题及详细参考答案(实操版)
- 学校节能改造方案
- 排烟系统施工方案
- NOIP2026 全国青少年信息学奥林匹克联赛普及组试题及详细答案
- 2026年护理学专业护理健康教育专项训练题库及答案
- 【新教材】人教精通版(2024)三年级上册英语Unit 2 School things Fun time 教案
- 牡丹江市宁安市2025-2026学年数学三下期末综合测试模拟试题(含答案解析)
- 河南省兰考县2027届数学九上期末经典模拟试题含解析
- 连锁快闪移动办公协议
- 家电卖场主力店协议
- 2026山东东诚投资发展有限公司招聘总经理助理5人备考题库及参考答案详解一套
- 高中生物全部知识点系统总结
- 中国华氏巨球蛋白血症诊疗指南(2025版)
- 2025年雕刻软件ZBrush教程
- 老年恶性肿瘤特点及治疗
- 室外道路景观工程施工方案范例
- QGDW11221-2023低压综合配电箱技术规范(参考文本)
- MATLAB8.X程序设计及典型应用第七章
- 选煤厂机电管理课件
- 水钻打孔协议书
- 毕业设计(论文)-干玉米脱粒机设计
评论
0/150
提交评论