Tim*_*Tim 24 memory-management segmentation-fault page-fault
我想知道分段错误和页面错误之间有什么区别和关系?
分段故障只属于分段内存模型吗?
页面错误只属于分页内存模型吗?
如果两者都是,那么由于大多数计算机系统(如x86和Linux)使用分页内存模型而不是分段内存模型,为什么GCC C编译器有时会报告分段错误错误?
感谢致敬!
Ern*_*ill 29
实际上,这两件事情非常不同.甲分段故障意味着试图访问无效的或非法的存储器地址的程序:例如,0或比任何有效的指针的值.一个页面错误是当指针尝试访问目前不能映射到物理内存地址空间中的页面,使MMU需要抓住它关闭磁盘,然后才能使用它.前者是非法的条件,程序一般会中止; 后者是完全正常的,程序甚至不知道它.
"分段"与早期x86处理器使用的旧"分段存储器模型"完全没有关系; 它是一个早期的用途,它只是指内存的一部分或一部分.
当不允许访问内存(不存在或被禁止)时,会发生分段错误.最常见的是,当您取消引用null变量或运行数组末尾时,它们会发生.当访问映射但未加载的内存时,会发生页面错误.它们不是错误,并向操作系统发出信号,表明它应该将适当的页面加载到内存中.