我想知道之间存在什么差异和关系 分段错误和页面错误?
分段错误只属于分段内存模型吗?
页面错误只属于分页内存模型吗?
如果两者都是,那么由于大多数计算机系统(如x86和Linux)使用分页内存模型而不是分段内存模型,为什么GCC C编译器有时会报告分段错误错误?
谢谢和问候!
答案 0 :(得分:29)
实际上,这两件事情非常不同。 分段错误表示程序试图访问无效或非法的内存地址:例如,0或大于任何有效指针的值。 页面错误是指针试图访问当前未映射到物理内存的地址空间页面时,因此MMU需要先从磁盘中抓取它才能使用它。前者是非法的条件,程序一般会中止;后者完全正常,程序甚至都不知道。
“分段”与早期x86处理器使用的旧“分段内存模型”完全没有关系;它是一个早期的用法,只是指内存的一部分或段。
答案 1 :(得分:9)
当不允许访问内存(不存在或被禁止)时,会发生分段错误。最常见的是,当您取消引用null变量或运行数组末尾时,它们会发生。当访问映射但未加载的内存时,会发生页面错误。它们不是错误,并向操作系统发出信号,表明它应该将适当的页面加载到内存中。