导航:首页 > 源码编译 > 编译阶段形成逻辑地址

编译阶段形成逻辑地址

发布时间:2025-01-20 06:17:10

‘壹’ C语言,所有变量的逻辑地址都是编译后确定的吗

是的。程序都是在运行阶段分配内存,所有变量的逻辑地址都是在编译后就确定了,但都是相对的偏移地址,只不过全局变量是相对数据段的偏移,局部变量是相对程序栈顶的偏移。

‘贰’ C语言的&运算符取的是逻辑地址还是物理地址 每次重新编译运行后 输出变量的地址值都一样 怎么理解

您需要了解一下操作系统的虚拟内存机制。
操作系统会为新建立的每一个进程开辟一个独立却完整的地址空间(32位机器是4GB),其中除了一部分地址要交给操作系统的内核或用于某些特殊功用,程序可以自由地使用这些内存,就好像每个进程可以独自使用一台4GB内存的机器一样。但是要注意这是由操作系统虚拟出来的,系统的内存管理器要负责把这些虚拟的内存映射到真实的物理内存中。系统往往同时运行很多进程,要把真实的内存给每个进程都分配4GB当然不可能,所以系统往往还要借用硬盘来存放物理内存存不下的内容,协助虚拟内存的实现。实际的物理内存的状况是:零散无规律地分布着各个进程的内存页面。
当一个新进程启动时,操作系统首先为该进程创建虚拟内存空间,然后把程序的代码段和一部分数据放在固定的虚拟内存地址上。你说的那个变量A就是被包含这部分数据中,每次启动程序都可以看到它在一个固定的地址上,但是这个地址是在虚拟内存中的,实际它所对应的真实物理内存的地址是未知的,只有管理内存的系统内核知道。
当然,还有一部分数据在你的虚拟内存空间的地址也是未知的,这就是堆,堆允许程序在运行过程中动态分配和释放内存(其他的内存分配方式在程序启动时就在固定位置分配,不能改变),堆的分配和释放由C运行时库和操作系统协同管理,分配的内存地址是随机的。你说的那个变量A不是堆中的。
你说的逻辑地址就是在虚拟内存中的地址,物理地址就是在真实的物理内存中的地址。
对于以上有不懂的概念名词可网络查资料。

‘叁’ 操作系统中 区分编译后的形成逻辑地址和链接后的形成的最终逻辑地址 什么意思啊

编译后产生若干个目标模块,编译后的逻辑地址指的是每个模块都从0号单元开始编址,而链接将这些模块链接在一起,形成一个完整的装入模块,此时的逻辑地址会重新编址,也就是说链接后的逻辑地址是将整个模块从0号单元开始编址。

‘肆’ 高级语言源程序编译后产生的地址是逻辑地址还是物理地址

由于操作系统技术的发展,可重用二进制程序技术使用了内存重定位技术,所以从汇编的角度来看即不是逻辑地址也不是物理地址。而且这个概念有些不同,编译后产生的地址是相对地址,是相对于可执行头部位置的地址。而逻辑地址是指在指令系统内部使用的用来访问内存的一个逻辑表示,通常表现为相对于某个段基地址的偏移量。
当可执行程序被载入内存之后,才会有逻辑地址存在,此时可执行程序被如何加载于何处,地址为多少,由操作系统决定,此时cpu访问程序用的是逻辑地址。一个程序一旦被编译确定之后基本上变量初始化的顺序固定,资源分配位置也固定,设置有编译器使用预分配机制,然后采用相对地址引用。
注意:某些工具书也称二进制可执行文件内所有的相对地址范围是逻辑地址空间,相对地址就是逻辑地址。因为两者的访问方式相似,逻辑地址变换依赖cpu或者附加变换机构(硬件),而二进制程序地址空间变换需要操作系统插手管理。
反汇编分析中常常将二进制内部地址称为逻辑地址,因为反汇编器不能还原原来汇编代码的地址跳转空间特性,因此得到一个相对于二进制数据起点位置的相对地址,而和内存和物理存储都没有关系。

阅读全文

与编译阶段形成逻辑地址相关的资料

热点内容
pso算法优化参数 浏览:606
java打开pdf文件怎么打开 浏览:369
用银行家算法拒绝死锁的例题 浏览:670
洗盘选股指标源码 浏览:705
百度云盘下载的压缩包怎么解压 浏览:737
加密类型是TKIP被我弄掉了 浏览:234
贝刻智能手环app如何下载 浏览:838
公司电脑上的加密文件解密 浏览:462
服务器怎么配置数据库 浏览:889
压缩机和制冷剂 浏览:182
树莓派手机版编程 浏览:926
谷歌编程挑战赛时间安排 浏览:438
自动学习机源码 浏览:938
明日之后星曳镇是什么服务器 浏览:474
编程学有年龄限制吗 浏览:571
工程可靠度pdf 浏览:900
包子解压玩具会爆吗 浏览:143
资治通鉴柏杨版pdf 浏览:852
跆拳道pdf 浏览:205
程序员毕设可以攻哪个方向 浏览:427