欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 【从零开始学习计算机科学】编译原理(七)运行时刻环境

【从零开始学习计算机科学】编译原理(七)运行时刻环境

2025/5/11 4:49:54 来源:https://blog.csdn.net/m0_46224993/article/details/146101586  浏览:    关键词:【从零开始学习计算机科学】编译原理(七)运行时刻环境

【从零开始学习计算机科学】编译原理(七)运行时刻环境

  • 运行时刻环境
    • 存储组织
    • 空间的栈式分配
      • 活动树
      • 活动记录和控制栈
      • 简单栈式存贮分配
      • C语言的过程调用和过程返回时的存贮管理
    • 堆式存储分配
      • 堆式存储分配的功能
      • 垃圾回收
        • 基于跟踪的垃圾回收
        • 短停顿垃圾回收

运行时刻环境

存储组织

目标程序在它自己的逻辑地址空间内运行,程序中的代码和数据都在这个空间中有一个具体的地址。目标程序在逻辑地址空间的运行时刻映像包括:

  • 代码区,存储目标代码。目标代码的大小在编译时刻就已经确定,编译器将可执行的目标代码放在一个静态确定的区域。
  • 数据区,具体分为静态数据区、栈区和堆区。
    • 静态数据区:程序的某些数据对象的大小可在编译时刻知道,它们可被放置在静态数据区。
    • 栈区和堆区:动态数据区,其大小会随着程序运行而改变。

在这里插入图片描述

栈区存放为运行函数而分配的局部变量、函数参数、返回数据等,函数运行时分配,函数结束时释放。分配方式类似于数据结构中的栈。栈区是一块连续的内存区域;栈区内存通常大小有限,一般不超过8MB;向栈区申请的内存过大时会导致栈溢出。

堆区存放具有更灵活的生命周期的数据,支持手动分配和回收数据对象。分配方式类似于数据结构中的链表。其使用不连续的内存区域;32位计算机堆的大小最大可为4GB;若不释放分配的内存会造成内存泄露。

空间的栈式分配

活动树

我们可以用一棵树来描绘控制进入和离开活动的途径,这样的树称作活动树。在一棵活动树中:每一个结点代表一个过程的活动;根结点代表主程序的活动(如main函数);代表

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词