美文网首页
编译器笔记41-运行存储分配-调用序列和返回序列

编译器笔记41-运行存储分配-调用序列和返回序列

作者: 衣忌破 | 来源:发表于2020-03-09 23:14 被阅读0次

调用序列和返回序列

过程调用和过程返回都需要执行一些代码来管理活动记录栈,保存或恢复机器状态等。

  • 调用序列
    实现过程调用的代码段。为一个活动记录在栈中分配空间,并在此记录的字段中填写信息。
  • 返回序列
    恢复机器状态,使得调用过程能够在调用结束之后继续执行。
  • 一个调用代码序列中的代码通常被分割到调用过程(调用者)和被调用过程(被调用者)中。返回序列也是如此。

调用序列

调用序列.png

返回序列

返回序列.png

调用者和被调用者之间的任务划分

调用者和被调用者之间的任务划分.png

变长数据的存储分配

  • 在现代程序设计语言中,在编译时刻不能确定大小的对象将被分配在堆区。但是,如果它们是过程的局部对象,也可以将它们分配在运行时刻栈中。尽量将对象放置在栈区的原因:可以避免对它们的空间进行垃圾回收,也就减少了相应的

  • 只有一个数据对象局部于某个过程 ,且当此过程结束时它变得不可访问,才可以使用栈为这个对象分配空间。

访问动态分配的数组

访问动态分配的数组.png

相关文章

  • 编译器笔记41-运行存储分配-调用序列和返回序列

    调用序列和返回序列 过程调用和过程返回都需要执行一些代码来管理活动记录栈,保存或恢复机器状态等。 调用序列实现过程...

  • 测序数据类型整理(bam,sam,bw等)

    fastq:测序返回的数据,主要是序列信息和对应的质量值 fasta:用于序列存储 sam:sequence al...

  • 编译器笔记38-运行存储分配-运行存储分配概述

    运行存储分配策略 编译器在工作过程中,必须为源程序中出现的一些数据对象分配运行时的存储空间。 对于那些在编译时刻就...

  • java序列化与反序列化

    序列化的意义 1.永久存储某个jvm中运行时的对象。2.对象可以网络传输3.rmi调用都是以序列化的方式传输参数 ...

  • Remove Duplicates from Sorted Ar

    Easy 给定有序数列,去除重复元素并返回新序列长度。不要建立新序列,保证占用存储不变。 关键在于不能新建序列,只...

  • Swift_数组排序sorted

    [使用]:返回排序后的元素序列。你可以通过调用这个方法对符合“Comparable”协议的任何元素序列进行排序。

  • 编译器笔记39-运行存储分配-静态存储分配

    静态存储分配 在静态存储分配中,编译器为每个过程确定其活动记录在目标程序中的位置。这样,过程中每个名字的存储位置就...

  • 【Python】pickle模块

    pickle模块的作用 实现基本的数据序列和反序列化 将程序中运行的对象信息保存到文件中去,永久存储 通过pick...

  • RxSwift-map源码解析

    map的使用 转换闭包应用于可观察序列发出的元素,并返回转换后的元素的新可观察序列。 map序列创建 map调用c...

  • 序列化和反序列化

    序列化:将堆内存中的Java对象,转换成字节序列,使其支持持久化存储(存储到磁盘)和网络传输 反序列化:将字节序列...

网友评论

      本文标题:编译器笔记41-运行存储分配-调用序列和返回序列

      本文链接:https://www.haomeiwen.com/subject/iuzmdhtx.html