C函数f1具有100个元素的局部整数数组,并且它调用另一个函数f2。在遵守MIPS之后,以下哪项陈述是正确的? (a)调用此函数时,堆栈将精确增长100个字节。 (b)调用此函数时,堆栈将正好增长400个字节。 (c)调用此函数时,堆栈将增长不少于404个字节。 (d)以上都不是。
我的想法是答案是D因为函数f1有100个整数数组元素,所以由于每个整数使用4个字节,因此需要100个字节。然而,我们缺少函数f2的信息,因为f2也可能有一个存储在堆栈中的整数数组。事实上我们不知道函数f2是否有一个整数数组AND即使它确实存在,我们也不知道该函数是否选择将数组存储在堆栈上,这让我认为D是正确的答案。假设只是因为你有一个函数并不意味着你将在堆栈上为它可能包含的内容分配空间是正确的,对吗?
谢谢!
答案 0 :(得分:1)
在体系结构中,返回地址在寄存器中传递,'leaf'函数可以简单地说br [r15]
。这反过来预先假定要调用叶函数f2,f1必须调用一些指令,首先将返回地址设置为r15然后调用f2。但是r15之前的内容会发生什么? f1在哪里回归?
即使MIPS使用基于堆栈的返回地址存储,也适用相同的概念。