描述影响存储管理的编程语言设计中的问题?
编程语言设计中有各种问题会影响正在运行的程序对存储的利用。必须为多个元素分配存储空间才能执行目标程序。存储空间主要用于目标程序和用户定义的数据结构、变量和常量。还需要存储过程链接信息、表达式评估所需的临时文件和参数传递的存储空间。
各种编程语言为目标程序安排空间有不同的方式-
静态存储分配-这是最简单的分配方案,其中数据对象的分配在编译时完成,因为每个数据项的大小都可以由编译器确定。如果每个数据项的大小可以由编译器确定并且不允许递归过程调用,则可以在编译时静态分配所有程序和数据的存储空间。这种方案很容易实现,不需要运行时支持。
动态存储分配-如果编程语言允许大小可调的递归过程或数据结构,则需要动态存储分配。
有两种类型的动态存储分配,如下所示-
堆栈分配-对于处理递归过程很有用。当每个过程被调用时,它把它的数据放在一个堆栈的顶部,当这个过程返回时,它把它的数据从堆栈中弹出。在运行时使用某种堆栈。
好处
它支持递归。
它动态地为数据项创建数据结构。
缺点
内存寻址可以使用指针和索引寄存器来完成。因此,分配类型比静态分配慢。
堆分配-对于实现大小随程序运行而变化的数据很有用。它涉及获取一大块内存并将其划分为可变长度的块,一些用于数据,一些用于空闲。当一条数据被创建时,它可以找到一块空闲的内存。当不再需要数据时,其块变为空闲。
有两种用于堆管理的方法如下-
垃圾回收方式
当一个对象的所有访问路径被销毁,但数据对象继续存在时,这种类型的对象被称为垃圾。垃圾收集是一种用于重用该对象空间的技术。
参考计数器
通过引用计数器,尝试在无法再访问后立即回收堆存储的每个元素。