第七章 运行时的存储组织和分配(1)

        编译程序在其工作过程中,必须为源程序中所出现的一些量(常量、变量及某些数组等等)分配运行时的存储空间。存储分配方案的选择是否得当,将关系到计算机资源的合理使用,从而也将对编译系统的解题能力产生一定的影响。

       存储管理是指目标程序在运行时对内存的使用和再使用的安排。存储管理的策略要尽可能满足对内存使用的合理性和经济性,以及对程序中各个数据和实体访问的方便性。在实施存储管理时,应根据高级语言各自不同的特点来决定采取不同的存储分配方案。

       如果一个高级语言不允许有可变体积的数据项或待定属性的名字,也不允许递归过程,则可以在编译时完全确定程序中每个数据项的存储空间。对于这样的高级语言(例如BASIC和FORTRAN) ,可采用静态分配的策略,也就是说,在编译时就分配各种数据项的存储空间

       反之,如果不能在编译时完全确定高级语言源程序中所有数据项的存储空间,就要采用动态分配的策略,即在编译时仅产生各种必要的信息,而在运行时,再动态地分配数据项的存储空间动态分配一般有两种方案。一种是用一个栈作为动态分配的存储区,运行时,每当进入一个分程序或过程,其中各数据项所需的存储空间就动态地分配于栈顶;退出时,则释放所占用的空间。这种方法称为栈式动态分配另一种是给运行的程序划分一个大的存储区(称为堆),每当需要时可从堆中分得一块,用过之后再退还给堆,这种方法称为堆式动态分配策略。如果说栈式分配很好地解决了过程的递归调用等问题,那么,堆式分配则解决了程序运行时动态申请存储空间等问题


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值