虚拟内存如何发生段错误?

dyl*_*345 5 virtual-memory segmentation-fault

我很困惑进程在使用虚拟内存时如何可能出现段错误。据我了解,“虚拟”内存允许进程访问所有可用内存,然后将其映射到“实际”硬件内存。通过这种转换,进程怎么可能尝试访问不允许访问的内存部分?

inn*_*SPG 1

分段错误是指当您尝试访问未分配给变量的位置时。常见情况是超出数组范围或尝试访问未分配的动态变量。您必须区分这种情况和虚拟内存。系统强制执行此操作是为了防止您的程序破坏自己的数据或系统上运行的其他程序的数据;更糟糕的是破坏系统本身的数据。想一想。

虚拟内存只是意味着您可以分配比物理 RAM 更多的内存。这并不意味着您可以在没有请求的情况下访问这样的空间。

  • 我知道分段错误通常是通过编程错误发生的,但是如果您的进程的虚拟地址空间是在操作系统创建进程时创建和分配的,那么第 100000000 个元素也应该在您的地址空间中,不是吗?它的意义不在于它对于进程来说是一个连续的内存块,但以操作系统想要的方式映射到物理内存吗?因此,如果您的进程尝试访问它自己的地址空间中的地址,但最终访问了另一个进程中的地址……操作系统是否错误地映射了它? (2认同)