十六进制内存地址是否代表整个内存中的位置?
e.g。 4 gb ram并且有一个记忆地址。它是否指向数据开始的位置(以字节为单位)?例如在2.1 gb。
在将数据加载到内存之前,内存地址如何在硬盘上运行?
是否存在从内存中获取部分数据并从磁盘中获取其他数据的情况?地点如何区分?
由于
答案 0 :(得分:3)
十六进制内存地址(就像你打印出指针值时所看到的那样)指向虚拟内存中的一个位置。
在32位系统上,每个进程都有一个完整的4GB虚拟内存。该虚拟内存由CPU和操作系统管理。当您访问虚拟内存中的某个位置时,CPU和操作系统会确定系统实际物理内存中该位置的映射位置,并从中检索数据。
操作系统也可以从物理内存中取出并将它们交换到磁盘,以便为物理内存腾出空间用于其他事情。然后,如果您尝试访问从物理内存交换到磁盘的虚拟内存位置,则会生成“页面错误”,导致操作系统将页面从磁盘重新加载到物理内存中。
答案 1 :(得分:2)
现代操作系统有virtual memory。
这意味着使用您的程序访问内存中某个字节的地址纯粹是“虚拟的”,不存在。操作系统通过特殊硬件控制器将其映射到完全不同的真实存储器位置,并且对于给定地址可能根本没有物理存储器位置。例如,您可以mmap()将文件放入(虚拟)内存中,并且访问虚拟地址处的字节将意味着访问文件的字节。同样,如果长时间未使用某些memory page,操作系统可能会swap off从物理RAM到磁盘的页面。在这种情况下,虚拟内存也不会指向物理内存位置。
答案 2 :(得分:0)
在大多数情况下 - 是的。但是一些处理器使用2个值来计算实际地址。例如Intel 8086。 Hardisk只是存储,它有自己的系统来存储信息。因此,在执行任何CPU操作之前,必须将数据加载到RAM中。