0

AC 函数 f1 有一个包含 100 个元素的局部整数数组,它调用另一个函数 f2。编译成 MIPS 后,下列说法正确的是?(a) 当这个函数被调用时,栈将增长 100 字节。(b) 调用此函数时,堆栈将增长正好 400 字节。 (c) 调用此函数时,堆栈将增长不少于 404 字节。(d) 以上都不是。

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

谢谢!

4

1 回答 1

1

在返回地址在寄存器中传递的架构中,'leaf' 函数可以简单地说br [r15]. 这反过来又假设调用叶函数 f2,f1 必须调用一些指令,这些指令首先将返回地址设置为 r15,然后调用 f2。但是r15之前的内容会怎样呢?f1回到哪里?

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

于 2012-10-18T05:59:05.260 回答