|
|
发表于 2005-7-13 10:34:23
|
显示全部楼层
Post by haohao_h
静态内存堆内存栈内存在物理布局上有没有区别啊?
操作系统系统又是怎样去区分它们的呢?
找些编译原理操作系统计算机组成原理的书看看吧.
粗略的说, 一个.exe文件分很多段,代码和常量数据
一般在text段,全局变量一般在data段, 这是静态结构。
在被OS装入内存中后,OS会为这个可执行文件创建一个
进程数据结构的实例proc, 在这个proc内记录了这个进程
的text段和data段对应的内存地址范围,而且,OS会给这个
进程分配stack和heap空间,这些空间的范围描述都在进程
结构里有描述(这些信息可能在.exe文件里有记载,也可能
由OS确定),比如32MB的进程地址空间:
<...><text><data><...><heap><stack><...>
0 -----------------------------------------------------32MB
而一个变量的地址是由链接器确定的,比如一个全局变量aa, 则
&aa的值由链接器确定,比如0x0050, 这个地址是相对于data段
开头的偏移,运行时访问这个aa会加上data段的开始地址(比如
i386的DS寄存器)。
仅供参考,你最好找书看看,肯定比我说的准确。 |
|