C中的内存起始位置

sma*_*ato 7 c memory memory-layout

我正在研究给定进程的内存布局.我注意到每个进程的起始内存位置不是0.在这个网站上,TEXT从0x08048000开始.一个原因可以是使用NULL指针区分地址.我只是想知道是否还有其他好的理由?谢谢.

Joo*_*gen 0

加载将二进制文件分段加载到内存中:文本(常量)、数据、代码。不需要从 0 开始,而且 C 存在访问 null 周围的 bug 的问题,这样a[i]甚至是危险的。这允许(在某些处理器上)拦截分段错误。

这将是 C 运行时引入从 0 开始的线性地址空间。当 C 是操作系统的实现语言时,这是可以想象的。但没有任何作用;让堆从 0 开始。内存模型是段之一。代码段可能受到保护,免遭某些处理器的修改。

分段分配发生在 C 运行时管理的内存块中。

我可能会补充一点,物理 0 及以上数字通常由操作系统本身使用。