c++ - 为什么linux中.text 虚拟内存段不是从0起始的?

 那朵逆风的蔷薇_708 发布于 2022-11-06 11:48

另外,为什么.text段对于32bit/64bit体系分别起始于0x08048000/0x00400000, 关于这个确定数值的取值有什么决定因素?

2 个回答
  • From the Linkers and loaders book:

    On 386 systems, the text base address is 0x08048000, which permits a reasonably large stack below the text while still staying above address 0x08000000, permitting most programs to use a single second-level page table. (Recall that on the 386, each second-level table maps 0x00400000 addresses.)

    2022-11-11 13:07 回答
  • 据我所知,这个数字没什么特殊含义,这个数值就是大佬们拍脑袋定的。
    文档里说:虚拟内存不从0开始是为了可以预留一个足够大的read only堆,每个程序都可以在这里建立单独的2级页表。一个2级页表是0x00400000

    2022-11-11 13:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有