32
  1. 我想知道分段错误和页面错误之间有什么区别和关系?

  2. 分段错误是否只属于分段内存模型?

    页面错误是否只属于分页内存模型?

    如果两者都是,那么由于大多数计算机系统如 x86 和 Linux 使用分页内存模型而不是分段内存模型,为什么 GCC C 编译器有时会报告分段错误错误?

谢谢并恭祝安康!

4

2 回答 2

39

这两件事其实很不一样。分段错误意味着程序试图访问无效或非法的内存地址:例如,0,或大于任何有效指针的值。页面错误是指指针试图访问当前未映射到物理内存的地址空间页面,因此 MMU 需要在使用它之前从磁盘上抓取它。前者是非法条件,程序一般会被中止;后者是完全正常的,程序甚至都不知道它。

“分段”与早期 x86 处理器使用的旧“分段内存模型”完全无关;它是较早的用法,仅指内存的一部分或

于 2011-08-05T01:53:58.690 回答
11

当内存不允许访问(不存在,或被禁止)时,会发生分段错误。当您取消引用空变量或超出数组末尾时,它们最常发生。访问已映射但未加载的内存时会发生页面错误。它们不是错误,而是向操作系统发出信号,表明它应该将适当的页面加载到内存中。

于 2011-08-05T01:51:19.043 回答