静态/动态重定位、静态/动态内存分配

本文对比了静态重定位,编译时确定地址,适用于固定内存布局;动态重定位则允许程序在运行时调整地址,提高灵活性。同时讨论了静态内存分配的固定性和动态内存分配的灵活性,以及如何通过移动技术和可重定位分区来解决内存碎片问题。
摘要由CSDN通过智能技术生成

静态重定位:

静态重定位是指程序在编译链接阶段,将程序中的符号地址转换为实际的物理地址。

在静态重定位的情况下,程序在运行时不会改变其所需的内存地址,因为所有的地址已经在编译链接阶段确定下来。这意味着程序在加载到内存后,其各个部分的位置是固定的,不会发生变化。

动态重定位:

动态重定位是指程序在运行时,能够根据需要调整其内存地址空间中的部分内容。

当程序执行时,操作系统会根据动态链接库、虚拟内存等机制,将程序加载到内存中的某个位置,并可以根据需要在运行时进行地址重定位。

动态重定位使得程序在运行时更加灵活,能够适应不同的内存布局和其他程序的加载情况。

实现动态重定位需要重定位寄存器的支持,存储了当前程序或进程在内存中的基地址,用于动态地调整程序中指令的地址,以实现程序的重定位和正确访问内存中的数据或指令。

静态内存分配:

内存静态分配是指在程序编译阶段确定程序中变量、数组等数据结构的内存大小和位置,这些内存分配是固定的,直到程序结束才会释放。

静态分配的内存通常包括全局变量、静态变量以及在函数中使用 static 关键字声明的变量。

静态内存分配一般是在栈区分配。

动态内存分配:

内存动态分配是指程序在运行时根据需要动态地分配内存空间,通常使用像 mallocnew 这样的函数或者操作符来进行动态内存分配。

动态分配的内存可以在程序运行时根据需要进行分配和释放,使得程序能够更加灵活地管理内存资源。

动态内存分配一般在堆区分配。而且动态内存分配更容易产生内存碎片。

解决内存碎片问题的一种有效的方法是移动内存中所有进程的存储区,使它版们相互邻接并权位于内存的某一端,而把全部空闲区留在另一端,形成一个大的空闲分区,这种技术称为“紧凑”。由于经过紧凑后的用户进程在内存中的位置发生了变化,必须采用动态重定位的方法,因此可重定位分区是解决内存碎片问题的有效方法。

转载于如何利用移动技术解决可变分区存储管理中的碎片问题_360问答

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值