使用户空间文本段从 0x8048000 开始的基本原理

dar*_*dar 5 linux process memory elf virtual-memory

我在某处读到(至少从 Linux v. 2.6 开始)所有用户空间代码都放置在虚拟内存地址空间中的加载地址 0x8048000 处。

我自己的观察证实了这一点。我做了一个

cat /proc/......../maps
Run Code Online (Sandbox Code Playgroud)

对于多个进程,进程'程序的第一部分text总是从'0x8048000'开始。

此外,C 库启动代码和所有其他运行时好东西似乎都映射在此默认值之后。

这构成了近 128 M 的地址空间,考虑到 0xC0000000 - 0x8048000 仍然是用户空间内容的几乎 3G 地址空间,这并不多。

所以我的问题是为什么?

我们正在处理虚拟地址,与其他程序的干扰或重叠是由 VM 工作方式的定义排除的。

0x00000000 到 0x8048000 范围内是否有一些固定/默认映射?

除了默认起始地址落在页面边界这一事实之外,选择这个数字而不是任何其他值的理由是什么?