QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1299|回复: 8

GCC连接时的地址问题

[复制链接]
发表于 2005-12-8 12:14:13 | 显示全部楼层 |阅读模式
gcc连接时,是生成数据和代码在内存中的绝对地址还是相对地址呢?

我看了一些资料,反编译了可执行目标文件,好像是绝对地址?但是,我觉得应该不是绝对地址。


这个问题比较菜,望那个高手指点一下,谢了先
发表于 2005-12-8 13:23:03 | 显示全部楼层
怎么可能是绝对地址?
就一个数值,你怎么看得出来它是绝对地址?
回复

使用道具 举报

发表于 2005-12-8 15:43:06 | 显示全部楼层
动态连接库是相对地址

可执行文件是绝对地址

别忘了虚拟地址空间。
回复

使用道具 举报

 楼主| 发表于 2005-12-8 16:22:41 | 显示全部楼层
如果每个可执行文件都是绝对地址,那么连接器怎么为他们分配绝对地址呢?这样不会两个可执行文件拥有重复的绝对地址吗?
我就是这个搞不懂
回复

使用道具 举报

发表于 2005-12-8 16:43:48 | 显示全部楼层
找本讲解linux内核的书读读就明白了。

简单来说,就是CPU里有一个硬件地址翻译器,操作系统为你的程序
建立一张对象文件里的绝对地址到实际的物理内存地址的映射表。

两个程序都被连接器连接成例如在0x1000这个位置,但是各自的表里
映射的物理地址不一样,所以就不会重叠。

明白了上面的你就应该能立刻明白共享内存其实就是两张表里有相同
的物理地址。
回复

使用道具 举报

 楼主| 发表于 2005-12-8 16:54:57 | 显示全部楼层
哦,了解了,thks!
回复

使用道具 举报

发表于 2005-12-8 22:43:24 | 显示全部楼层
我怎么看到绝对地址下意识就想成物理地址了!
回复

使用道具 举报

发表于 2005-12-8 22:46:27 | 显示全部楼层
糊涂了,绝对地址是不是就是物理地址!?
程序里的是虚拟地址吧!?
回复

使用道具 举报

发表于 2005-12-9 11:55:06 | 显示全部楼层
[quote:b050b7061d="mozilla"]糊涂了,绝对地址是不是就是物理地址!?
程序里的是虚拟地址吧!?[/quote]

CPU一但运行在虚地址<->物理地址的寻址模式,程序就不可能
再通过物理地址访问内存了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-3 02:23 , Processed in 0.083545 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表