【发布时间】:2022-01-05 19:38:01
【问题描述】:
在讨论 32 位 MIPS 架构时,Patterson--Hennessy 解释说,静态数据段从0x 1000 0000 开始,以0x 1000 FFFF 结束,全局指针$gp 默认设置为中间地址@987654324 @。据说堆是下一个,因此应该从0x 1001 0000开始。
一些使用 MARS 的实验告诉我,中间有一个附加段,从0x 1001 0000 到0x 1003 FFFF,因此堆只从0x 1004 0000 开始。事实上,当我使用系统调用在堆上存储一个数组时,这个数组将存储在0x 1004 0000 之后。
当我在程序的.data 标头下初始化数据时,似乎会用到这个附加段。这让我很困惑,因为我期望在 .data 下初始化的数据被认为是静态的,因此应该存储在由全局指针控制的段中。
问题。行为是否符合 MARS 标准?如果是,这个位于静态数据和堆之间的附加数据段与位于它前面的静态数据段有何不同?
【问题讨论】:
标签: assembly global-variables mips heap-memory cpu-architecture