2012-10-18 50 views
0

C函数f1有一个由100个元素组成的局部整数数组,它调用另一个函数f2。在编入MIPS之后,下列哪些陈述是正确的? (a)当这个函数被调用时,堆栈将精确地增长100个字节。 (b)当这个函数被调用时,堆栈将会正好增长400字节。(c)当这个函数被调用时,堆栈将增长不少于404字节。 (d)以上都不是。堆栈增长与否?

我的想法是答案是D,因为函数f1有100个整数数组的元素,所以由于每个整数使用4个字节,所以需要100个字节。然而,我们缺少函数f2的信息,因为f2也可能有一个存储在堆栈中的整型数组。事实上,我们不知道函数f2是否有整数数组,即使它是这样做的,我们也不知道该函数是否选择将数组存储在堆栈中,这让我认为D是正确的答案。假设仅仅因为你有一个函数并不意味着你将在堆栈中分配空间,无论它包含什么,是正确的?

谢谢!

+0

你能弄清楚为什么答案C是这样制定的吗? –

回答

1

在架构中,返回地址在寄存器中传递,“叶”函数可以简单地说br [r15]。这反过来预先假定要调用叶函数f2,f1必须调用一些指令,首先将返回地址设置为r15,然后调用f2。但是以前的r15内容会发生什么? f1在哪里返回?

即使MIPS将使用基于堆栈的返回地址存储,也适用相同的概念。

+0

我很抱歉,但我不遵循你的解释与问题的关系。任何额外的信息将不胜感激。我是MIPS新手。 – user1752418

+0

让我们以另一种方式来说明:你已经给出了解答答案a和回避答案b和c,但没有透露他们为什么会明显错误。我试图解释c中的机制:为什么人们会选择404的任意常量作为大小。 –