博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Segmentation fault到底是何方妖孽
阅读量:4878 次
发布时间:2019-06-11

本文共 580 字,大约阅读时间需要 1 分钟。

进程运行的时候,它虚拟地址空间的布局和它所占用的物理内存到底是什么样子呢?虚拟地址空间我们还比较好理解,可实际物理地址并不是我们能直接访问到的。一般是通过一个集成在CPU内部的叫做MMU的内存管理单元完成了从进程虚拟地址到物理地址之间的映射。对这个映射过程感兴趣的童鞋可以去拜读Bean_lee兄的“”文章,那是相当之精彩。如果看不懂,就随时咨询他老人家。不过据我所知,他最近有点忙,忙得不亦乐乎,呵呵。OK,回到我们的话题上来。既然进程虚拟地址空间的任何地址,在使用前都必须通过MMU将其映射到物理内存上一个实实在在的存储单元上。那么对于任何没有经过MMU映射过的虚拟空间的地址,不管进程是执行写操作还是读操作,操作系统都会捕捉到这个错误的非法访问,然后输出一个“Segmetation Fault”的错误提示信息并强行终止进程。

   换句话说,一个进程虚拟空间里的任何地址,在进程访问它之前必须要经过MMU转换,将它映射到物理内存的某个具体的存储位置上才是合法有效的,不然操作系统就会用“Segmetation Fault”对你的进程进行宣判,然后将其kill掉。那么,问题又来了,到底哪些地址才是合法有效的呢?看一个简单的进程虚拟地址空间的布局:



转载于:https://www.cnblogs.com/roger0212/p/4436696.html

你可能感兴趣的文章
Linux下安装多个tomcat
查看>>
UIPickView之自定义生日键盘和城市键盘
查看>>
改变 C/C++ 控制台程序的输出颜色和样式
查看>>
第1章 游戏之乐——让CPU占用率曲线听你指挥
查看>>
整理大数据期末考试复习提纲--概念整理
查看>>
线程--promise furture 同步
查看>>
Mybatis3.2.3+mysql第一个例子(入门)
查看>>
Nginx 代理配置
查看>>
跟锦数学171217-180630
查看>>
Python之random
查看>>
与FPGA相关的独热码
查看>>
systemd(CentOS7)启动zookeeper
查看>>
[CQOI 2018]社交网络
查看>>
ADO constants include file for VBScript
查看>>
ExtJs4.2 RadioGroup CheckboxGroup
查看>>
InnoDB Undo Log
查看>>
在Application中集成Microsoft Translator服务之使用http获取服务
查看>>
flask页面中Head标签内容为空问题
查看>>
Centos7 Putty SSH密钥登录
查看>>
HDU 6330--Visual Cube(构造,计算)
查看>>