Segmentation fault 是什么
Segmentation fault 常常被称为SIGSEGV,是操作计算机软件时在特定条件下发生的错误。当程序试图使用不能使用的内存,或者以不正确的方式访问一块内存时产生的错误。Segmentation是一种内存管理和操作系统的保护机制。现在都是用页管理内存,一些操作系统虽然用页作为内存管理的主要策略,但是在逻辑层面仍然有segmentation。在诸如unix的操作系统,当处理器试图使用非法内存时,会收到SIGSEGV signal。在windows上,当处理器试图使用非法内存时,会收到STATUS_ACCESS_VIOLATION exception。
可以归类为:1SIGSEGV是在访问内存时发生的错误,属于内存管理的范畴
2 SIGSEGV 是一个用户态的概念,是操作系统在用户态程序错误访问内存所做出的处理。
3 当用户态程序访问(读写或执行)不允许访问的内存时,产生SIGSEGV。
4 当用户态程序以错误的方式访问允许访问的 内存时,产生SIGSEGV。
当用户态程序访问一个会引发SIGSEGV的地址时,硬件首先产生一个page fault,即“缺页异常”,内核中的page fault首先判断该地址是否属于用户态程序的地址空间,如果属于,则检查该访问的累世是否和该内存区域的类型是否匹配,不匹配,则发送SIGSEGV信号;如果该地址不属于用户态地址空间,检查访问该地址的操作是否发生在用户态,如果是,发送SIGSEGV。