关于程序在内存中的起始位置的问题,希望高手能够澄清一下概念。

JerKii 2003-11-12 12:49:48
对于一般的程序来说,他被加载到内存的时候,其基址都为0x00400000
那么A.exe在内存中的基址0x00400000和B.exe在内存中的基址0x00400000因该不是指向内存的同一个位置吧。因为那样显然是不合理的。还有0x00400000这个数字是相对于谁来计算的?是相对与操作系统分配给每个程序的内存空间还是相对整个操作系统的内存空间来计算的啊?。但是,内存中通过什么样的机制保证了他们在不同的内存空间?是不是按照下面的方式:

0023e0000:00400000 << A.exe

003400000:00400000 << B.exe

被加载的程序是不是都是运行在Windows的虚拟内存重?还是运行在物理内存和虚拟内存中,当物理内存不够用的时候就是用虚拟内存?着这么大的内存空间,各个程序又是怎样互不干扰的呢?谁能简要地介绍一下Windows是怎样管理内存中的程序的啊?

不好意思,我的分不多了。。。
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JerKii 2003-11-12
  • 打赏
  • 举报
回复
?
JerKii 2003-11-12
  • 打赏
  • 举报
回复
to 3jaja(3++输入法)
>>>>>>>>>>>>>>>
例如
A.exe物理地址=A.exe在内存中的基址0x00400000+偏移量
b.exe物理地址=b.exe在内存中的基址0x00400000+偏移量
那这个偏移量又是怎样确定的呢?
yifeng_ch 2003-11-12
  • 打赏
  • 举报
回复
up
3jaja 2003-11-12
  • 打赏
  • 举报
回复
A.exe在内存中的基址0x00400000和B.exe在内存中的基址0x00400000

例如
A.exe物理地址=A.exe在内存中的基址0x00400000+偏移量
b.exe物理地址=b.exe在内存中的基址0x00400000+偏移量

偏移量自然不同,其指向物理内存地址不同,各个程序又是怎能互相干扰.

ManFred2ManFred 2003-11-12
  • 打赏
  • 举报
回复
sorry笔误了:“在系统看来这是整整4GB”
应该是“在程序看来”。
ManFred2ManFred 2003-11-12
  • 打赏
  • 举报
回复
对!就是虚拟内存的概念。
相信你听说过:系统会为每个进程默认分配4GB的地址空间,这个空间就是虚拟的。在系统看来这是整整4GB,但实则不是。当然,参与当前cpu计算的数据和指令肯定是存储在物理内存中的,其余一些暂时用不到的东西则是被存储在硬盘里。这就是“页”的概念。其管理由系统完成,建议你看看《VC++技术内幕》第四版。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧