但为什么访问一个对齐的地址也会出现段错误?例如:
int *p = 08040000,r;
r=*p;
按理来说,BUS error不应该返回段错误的错误信息,也就是访问一个非对齐的地址发生的错误不应该叫"段"错误
所谓段错误,段错误顾名思义就是当前有权利范围的段中不包含这个地址,你示范的这个地址很可能就发生错误.这是段错误的本意 原帖由 cjaizss 于 2009-12-15 10:44 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
按理来说,BUS error不应该返回段错误的错误信息,也就是访问一个非对齐的地址发生的错误不应该叫"段"错误
所谓段错误,段错误顾名思义就是当前有权利范围的段中不包含这个地址,你示范的这个地址很可能就发生错 ...
可问题是这个有权力的范围怎么理解??一个进程有4G的虚拟空间,最少0~3G进程自己应该是可以访问的吧?如果不行,那么哪些范围能"被有权力"??
[ 本帖最后由 gofortime 于 2009-12-15 17:01 编辑 ] 地址空间 本身也是一种资源,你如果不向OS申请,这些地址空间是不会分配给你使用的。
就你说的0-3G是属于进程的用户空间,但进程被创建的时候是不会直接就分配0-3G的地址空间给你的,你要通过malloc类的操作,来申请地址空间,至于内存空间,则更要等到你确切使用的时候才会分配给你。
书里应该都写到了。个人理解,如果能把地址空间和内存空间分开,这些就会好理解很多了 “同样的程序,在arm及x86平台上都可以正常运行”?
这是什么样的程序?
页:
1
[2]