为什么会有动态基址,有基址不就行了吗,为什么要弄个动态地址出来
答案:1 悬赏:0 手机版
解决时间 2021-03-27 10:20
- 提问者网友:战皆罪
- 2021-03-26 09:30
为什么会有动态基址,有基址不就行了吗,为什么要弄个动态地址出来
最佳答案
- 五星知识达人网友:归鹤鸣
- 2021-03-26 10:11
这涉及动态内存管理的问题,简单举个例子吧,假设我们现在建立了一个全局对象,下面有几个不同的属性,比如对象名称之类的,那么既然是全局对象 ,那么就必须要有一个固定的位置来描述,以便程序每次在不同的位置都能找到它,但这个对象下面的属性的值却不是固定了,比如对象名称吧,它可能是三个字符,可能是三百个,也可能是三千个,那程序如何去分配足够的内存给这个属性呢?动态地址就是解决这个问题的。一般在程序中,约定一个基址作为数据的地址入口,在程序运行过程中因为数据变化导致原有分配给数据的地址不够而需要新的地址时,就将新地址的位置写入基址,这样,既能让程序能够保证在任何情况下数据都可使用,也避免了因数据溢出而造成的错误,同时还可以减少内存的使用量。追问那为什么偏移量每次都相同~!!!追答那是因为每个对象的属性结构是一定的,打个比方,定义一个全局对象,有三个属性,分别为为对象名称,对象大小,对象状态,对应的就有一个基址,三个偏移,基址对应对象数据入口,第一个偏移对应名称,第二个对应大小,第三个对应状态,这就是这个对象的数据结构,无论运行多少次都是这样的,但具体到偏移的值,则根据每次程序运行的情况,动态分配追问基址是不是字每次程序运行的时候,它分配到的内存位置都是不同的? 只要知道基址的名字就能按偏移值来计算出其他属性在内存的位置??追答程序编译过后基址就不变的,但每次运行基址内的值不一定一样,是动态分配的。简单说,一个全局变量字符串,每次都会把它分配到的地址值写入一个固定的地址,这样,只要读取这个地址的值,就能正确找到这个字符串的位置,这个字符串具体储存在内存的什么位置,却是不应的。
其次,单纯知道基址的位置不一定就能知道其他属性的位置,你要知道基址下的每个偏移分别对应什么属性,使用的什么格式的数据才行,一般来说可以去猜,但这需要经验,技巧。
附送一句,想写辅助,C,汇编,windows内核,数据结构分析以及API,内核权限管理等等内容都需要认真学习,没有捷径可走来自:求助得到的回答
其次,单纯知道基址的位置不一定就能知道其他属性的位置,你要知道基址下的每个偏移分别对应什么属性,使用的什么格式的数据才行,一般来说可以去猜,但这需要经验,技巧。
附送一句,想写辅助,C,汇编,windows内核,数据结构分析以及API,内核权限管理等等内容都需要认真学习,没有捷径可走来自:求助得到的回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯