每个进程都有自己私有的 地址空间。进程A可以在位于它的 地址空间内的0x12345678地址处存储一个数据结构。。。。
别高兴的太早!虽然应用程序有这么大的地址空间可用,但是要记住这只是 虚拟地址空间--不是 物理存储器。这个地址空间只不过是一个内存地址空间。为了能够正常读/写数据,我们还需要把物 理存储器分配或映射到相应的地址空间。否则将导致访问违规。
数据不是直接存放在内存中的么?
比如说int a[10] = {3};是在内存中分配一块存储空间,在其中存放3的。
那上面又说映射到磁盘,这是什么意思呢?
7 个解决方案
#1
自己顶下。
进程的地址空间和我上面所说的内存好像不是同一个概念。
int a[10] = {3};的时候应该是在堆(或者栈)中分配数据的存储空间。
而进程的地址空间和堆,栈是不同的概念。
进程的地址空间和我上面所说的内存好像不是同一个概念。
int a[10] = {3};的时候应该是在堆(或者栈)中分配数据的存储空间。
而进程的地址空间和堆,栈是不同的概念。
#2
这个建议你去看《操作系统》教程中的虚拟存贮器。
简单的说,一个Win32程序的寻址空间有4G,但是你的机器可能只有1G内存。所以你的程序中的数据并不是总是在内存中的,一部分暂时不用的是放在硬盘上的。
简单的说,一个Win32程序的寻址空间有4G,但是你的机器可能只有1G内存。所以你的程序中的数据并不是总是在内存中的,一部分暂时不用的是放在硬盘上的。
#3
别人也没说磁盘啊,你自己说的。别人说的是物理存储器。映射的话应该指的是物理地址映射到线性地址。这个涉及到分页机制,以及cpu的mmu。仔细研究的话会比较麻烦
#4
仔细看 操作系统
#5
恩 没啥说的了
#6
#7
#1
自己顶下。
进程的地址空间和我上面所说的内存好像不是同一个概念。
int a[10] = {3};的时候应该是在堆(或者栈)中分配数据的存储空间。
而进程的地址空间和堆,栈是不同的概念。
进程的地址空间和我上面所说的内存好像不是同一个概念。
int a[10] = {3};的时候应该是在堆(或者栈)中分配数据的存储空间。
而进程的地址空间和堆,栈是不同的概念。
#2
这个建议你去看《操作系统》教程中的虚拟存贮器。
简单的说,一个Win32程序的寻址空间有4G,但是你的机器可能只有1G内存。所以你的程序中的数据并不是总是在内存中的,一部分暂时不用的是放在硬盘上的。
简单的说,一个Win32程序的寻址空间有4G,但是你的机器可能只有1G内存。所以你的程序中的数据并不是总是在内存中的,一部分暂时不用的是放在硬盘上的。
#3
别人也没说磁盘啊,你自己说的。别人说的是物理存储器。映射的话应该指的是物理地址映射到线性地址。这个涉及到分页机制,以及cpu的mmu。仔细研究的话会比较麻烦
#4
仔细看 操作系统
#5
恩 没啥说的了