程序中的数据存放在哪里?

时间:2022-11-07 16:58:39
   今天看Windows核心编程的Windows内存体系结构一章。里面有如下的记述,求高手指点。
    
   每个进程都有自己私有的 地址空间。进程A可以在位于它的 地址空间内的0x12345678地址处存储一个数据结构。。。。


   别高兴的太早!虽然应用程序有这么大的地址空间可用,但是要记住这只是 虚拟地址空间--不是 物理存储器。这个地址空间只不过是一个内存地址空间。为了能够正常读/写数据,我们还需要把物 理存储器分配或映射到相应的地址空间。否则将导致访问违规。

   数据不是直接存放在内存中的么?
   比如说int a[10] = {3};是在内存中分配一块存储空间,在其中存放3的。

   那上面又说映射到磁盘,这是什么意思呢?

7 个解决方案

#1


自己顶下。

进程的地址空间和我上面所说的内存好像不是同一个概念。

int a[10] = {3};的时候应该是在堆(或者栈)中分配数据的存储空间。

而进程的地址空间和堆,栈是不同的概念。

#2


这个建议你去看《操作系统》教程中的虚拟存贮器。
简单的说,一个Win32程序的寻址空间有4G,但是你的机器可能只有1G内存。所以你的程序中的数据并不是总是在内存中的,一部分暂时不用的是放在硬盘上的。

#3


别人也没说磁盘啊,你自己说的。别人说的是物理存储器。映射的话应该指的是物理地址映射到线性地址。这个涉及到分页机制,以及cpu的mmu。仔细研究的话会比较麻烦

#4


仔细看 操作系统  

#5


恩 没啥说的了

#6


该回复于2010-12-10 11:10:29被版主删除

#7


该回复于2010-12-10 11:10:29被版主删除

#1


自己顶下。

进程的地址空间和我上面所说的内存好像不是同一个概念。

int a[10] = {3};的时候应该是在堆(或者栈)中分配数据的存储空间。

而进程的地址空间和堆,栈是不同的概念。

#2


这个建议你去看《操作系统》教程中的虚拟存贮器。
简单的说,一个Win32程序的寻址空间有4G,但是你的机器可能只有1G内存。所以你的程序中的数据并不是总是在内存中的,一部分暂时不用的是放在硬盘上的。

#3


别人也没说磁盘啊,你自己说的。别人说的是物理存储器。映射的话应该指的是物理地址映射到线性地址。这个涉及到分页机制,以及cpu的mmu。仔细研究的话会比较麻烦

#4


仔细看 操作系统  

#5


恩 没啥说的了

#6


该回复于2010-12-10 11:10:29被版主删除

#7


该回复于2010-12-10 11:10:29被版主删除