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