免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: WHITLACK
打印 上一主题 下一主题

同样的程序,在arm及x86平台上都可以正常运行,但在MIPS平台就segmentation fault [复制链接]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
11 [报告]
发表于 2009-12-15 10:44 |只看该作者
原帖由 gofortime 于 2009-12-15 09:28 发表
但为什么访问一个对齐的地址也会出现段错误?例如:

int *p = 08040000,r;
r=*p;

按理来说,BUS error不应该返回段错误的错误信息,也就是访问一个非对齐的地址发生的错误不应该叫"段"错误
所谓段错误,段错误顾名思义就是当前有权利范围的段中不包含这个地址,你示范的这个地址很可能就发生错误.这是段错误的本意

论坛徽章:
0
12 [报告]
发表于 2009-12-15 17:00 |只看该作者
原帖由 cjaizss 于 2009-12-15 10:44 发表

按理来说,BUS error不应该返回段错误的错误信息,也就是访问一个非对齐的地址发生的错误不应该叫"段"错误
所谓段错误,段错误顾名思义就是当前有权利范围的段中不包含这个地址,你示范的这个地址很可能就发生错 ...


可问题是这个有权力的范围怎么理解??一个进程有4G的虚拟空间,最少0~3G进程自己应该是可以访问的吧?如果不行,那么哪些范围能"被有权力"??

[ 本帖最后由 gofortime 于 2009-12-15 17:01 编辑 ]

论坛徽章:
0
13 [报告]
发表于 2009-12-15 18:39 |只看该作者
地址空间 本身也是一种资源,你如果不向OS申请,这些地址空间是不会分配给你使用的。
就你说的0-3G是属于进程的用户空间,但进程被创建的时候是不会直接就分配0-3G的地址空间给你的,你要通过malloc类的操作,来申请地址空间,至于内存空间,则更要等到你确切使用的时候才会分配给你。

书里应该都写到了。个人理解,如果能把地址空间和内存空间分开,这些就会好理解很多了

论坛徽章:
0
14 [报告]
发表于 2009-12-16 20:15 |只看该作者
“同样的程序,在arm及x86平台上都可以正常运行”?
这是什么样的程序?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP