学习段模式的时候想到,32位段页模式下一个段最大为4G,如果程序分n个段,那么整个程序最大可以有4*n G的空间?那一个程序有4G虚拟地址空间的说法,是在纯分页模式下才成立?
平时写的hello world之类的小程序是分几个段呢?
原则上说是这样的,但是还受物理地址限制,如果物理地址是32位的,那么搞再多段也没用。32位机器为了扩展4g以上内存,intel扩展了物理地址,可以使用36位,即总共64G内存。用16个段就可以访问。
但是目前操作系统为了方便,都把段基址设置成0,因此一个进程只能使用4G空间。要使用超过4G空间,需要操作系统的mmap,或者使用更多的进程。
程序的段可以分很多个,常见的.text,.data,.bss。但这个跟操作系统的段关系不大,操作系统一般只给应用程序2个段,一个.text,代码段,其他数据段包括堆栈都用一个。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。