LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1273|回复: 3

静态内存堆内存栈内存在物理布局上有没有区别啊?

[复制链接]
发表于 2005-7-12 23:48:54 | 显示全部楼层 |阅读模式
静态内存堆内存栈内存在物理布局上有没有区别啊?
操作系统系统又是怎样去区分它们的呢?
发表于 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寄存器)。

仅供参考,你最好找书看看,肯定比我说的准确。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-13 12:26:52 | 显示全部楼层
看来还得补编译原理啊!谢谢
回复 支持 反对

使用道具 举报

发表于 2005-7-13 20:00:47 | 显示全部楼层
要想搞清楚这些问题,不仅是需要编译原理,还需要操作系统和体系结构方面的知识。
回复 支持 反对

使用道具 举报

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

本版积分规则

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