2012-10-18 91 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的任意常量作爲大小。 –