不同进程使用的内存会被分页分块。进程开启时系统会划分一部分物理内存作为逻辑内存给进程使用,当进程结束是其分配的所有内存会被回收。一般来说程序入口都在0x04000000,这个0x04000000指的就是逻辑内存而不是真正的物理内存地址,真正的物理内存是不能访问的。
2014年02月25日 19点02分
所以对于所有32位程序来说,能使用的内存空间都是0x00000000-0x7FFFFFFF,实际上即使物理内存的大小不足2G也没关系,因为当物理内存不足(需要分配更多逻辑内存)时就会使用虚拟内存(硬盘文件当作逻辑内存)。
2014年02月25日 19点02分
你可以定义一个变量i然后弄一个指针p指向i,然后你会发现这个p的值大约在0x00409000处。说明0x00400000是程序入口,0x00409000是数据段入口地址。如果同时再开一个一样的程序,另外一个程序也在0x00409000,那这个0x00409000存的到底是哪一个i呢?
2014年02月25日 20点02分
事实上两个i在真正物理内存的地址时不同的,只不过系统将不同进程的逻辑内存区域映射到了不同的物理内存区域而已。
2014年02月25日 20点02分