目标程序运行时的数据管理.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
目标程序运行时的数据管理

10 目标程序运行时的数据管理 程序区:目标区、静态区、栈区和堆区 2. C语言数据区的建立和撤消 (1)过程调用段 Q(T1,T2,T3,…,Tn); (par,-,-T1) (par,-,-T2) ………….. (par,-,-Tn) (jsr,-n,Q) (2)过程进入段 (new)sp=(原)top+1 1[sp(new)]=返回地址 (new)top=sp+L (3)过程返回段 top=sp-1 sp=0[sp]=1[top] x(返回地址)=2[top] jump x 二、堆式存储分配 1.固定长度法 type getblock(head){ if(head==NULL) error(); else { p=head; head=head-next; return p; } } 2.可变长度法: (1)首次匹配法:只要在空闲块链表中找到满足需要的一块,就进行分配。 (2)最优匹配法(碎片最小):将空闲块链表中一个不小于申请块且最接近于申请块的空闲块分配给用户,则系统在分配前首先要对空闲块链表从头至尾描一遍,然后从中找出一块,为避免每次分配都要扫描整个链表,通常将空闲块链表空间的大小从小到大排序。 (3)最差匹配法(碎片最大):将空闲块表中不小于申请块且是最大的空闲的一部全分配给用户。此时的空闲块链表按空闲的块的大小从大到小排序。只需从链表中删除第一个结点,并将其中一部分分配给用户,而其它部分作为一个新的结点插入到空闲块表的适当置上去。 allcoate(AV,min,N){ Q=AV; while(Q!=NULL) if(Q.size=N){ Q.size=A.size-N; p=Q+Q.size; p.size=N; return p; } else Q=Q-next; error(0); } 三.参数传递 (1)procedure exchangel(i,j:integer); (2) var x:integer; (3) begin; (4) x:=a[i]; a[i]:=a[j]; a[j]:=x (5) end; 带有非局部变量和形参的PASCAL过程 非局变量a[i]和a[j]的值进行交换,i,j为形参(在这里是传值) (1)program reference(input,output); (2)var a,b:integer; (3)procedure swap( var x,y:integer); (4) var temp:integer; (5) begin (6) temp:=x; (7) x:=y; (8) y:=temp (9) end; (10)begin (11) a:=1; b:=2; (12) swap(a,b); (13) writeln(‘a=‘,a);writeln(‘b=‘,b) (14)end. 带有过程swap的PASCAL程序 传地址(变量参数) 例如:过程 swap(var x,y:integer); swap(a,b);( a,b为调用时的实参 ) 调用结果a,b的值被改变。 传值(值调用) 特点是对形式参数的任何运算不影响实参的值。例如:过程 swap(x,y:integer); swap(a,b);其结果: a,b调用前的值不改变。 传值的实现 1.形式参数当作过程的局部变量处理,即在被调过程的活动记录中开辟了形参的存储空间,这些存储位置即是我们所说的形式单元(用以存放实参)。 2.调用过程计算实参的值,并将其放在对应形式单元开辟的空间中。 3.被调用过程执行时,就像使用局部变量一样使用这些形式单元。 procedure swap( x,y:integ

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档