永发信息网

为什么会有动态基址,有基址不就行了吗,为什么要弄个动态地址出来

答案:1  悬赏:0  手机版
解决时间 2021-03-27 10:20
为什么会有动态基址,有基址不就行了吗,为什么要弄个动态地址出来
最佳答案
这涉及动态内存管理的问题,简单举个例子吧,假设我们现在建立了一个全局对象,下面有几个不同的属性,比如对象名称之类的,那么既然是全局对象 ,那么就必须要有一个固定的位置来描述,以便程序每次在不同的位置都能找到它,但这个对象下面的属性的值却不是固定了,比如对象名称吧,它可能是三个字符,可能是三百个,也可能是三千个,那程序如何去分配足够的内存给这个属性呢?动态地址就是解决这个问题的。一般在程序中,约定一个基址作为数据的地址入口,在程序运行过程中因为数据变化导致原有分配给数据的地址不够而需要新的地址时,就将新地址的位置写入基址,这样,既能让程序能够保证在任何情况下数据都可使用,也避免了因数据溢出而造成的错误,同时还可以减少内存的使用量。追问那为什么偏移量每次都相同~!!!追答那是因为每个对象的属性结构是一定的,打个比方,定义一个全局对象,有三个属性,分别为为对象名称,对象大小,对象状态,对应的就有一个基址,三个偏移,基址对应对象数据入口,第一个偏移对应名称,第二个对应大小,第三个对应状态,这就是这个对象的数据结构,无论运行多少次都是这样的,但具体到偏移的值,则根据每次程序运行的情况,动态分配追问基址是不是字每次程序运行的时候,它分配到的内存位置都是不同的? 只要知道基址的名字就能按偏移值来计算出其他属性在内存的位置??追答程序编译过后基址就不变的,但每次运行基址内的值不一定一样,是动态分配的。简单说,一个全局变量字符串,每次都会把它分配到的地址值写入一个固定的地址,这样,只要读取这个地址的值,就能正确找到这个字符串的位置,这个字符串具体储存在内存的什么位置,却是不应的。

其次,单纯知道基址的位置不一定就能知道其他属性的位置,你要知道基址下的每个偏移分别对应什么属性,使用的什么格式的数据才行,一般来说可以去猜,但这需要经验,技巧。

附送一句,想写辅助,C,汇编,windows内核,数据结构分析以及API,内核权限管理等等内容都需要认真学习,没有捷径可走来自:求助得到的回答
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
时骏汽车是国外产的吗?
办公楼楼梯疏散宽度如何确定
吞食天地2历史的天空2015玩不下去了求教
大庆车牌号黑e88660值多少钱?
丰田霸道TXL型号奔弛GLC260豪华和宝马6系GT和
请问珠海横琴拿个地方吃蚝好?
求何炅的资料
NBA历史六大分卫你怎么排名
买空调是买一级能效还是二级能效的呢?
单选题下列有关谷氨酸棒状杆菌的生长和谷氨酸
课表里的周次是什么意思
noneofheαboⅴe是什么意思
请问从员岗乘坐地铁到叫什么寿站离上下九街步
八戒沙僧是怎样大战鲤鱼精的?
突然有种心力绞碎的感觉这句话是什么意思?
推荐资讯
Cos(x-π/2)=?
为什么不吃刚刚烤的面包?刚出炉的热的面包可
呼和浩特怎么去阿尔山
多肉植物大和锦怎么叶插繁殖
给别人加流量怎么加
火车票改签了,票上是有座位,到底有没有座位
It is perhaps not an exaggeration to say t
在我们中国那个地方产毛驴
真的难受啊
中国新式海军袖上军衔图片
双氯芬酸钠缓释片与高乌甲素哪个好
小高从家到学校,平时总是7:50到学校,有一天
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?