2017-06-17 119 views
-1

我正在解決一個測試問題,我不確定是否有正確的答案。問題是:如果我在32位操作系統下運行代碼,在函數hook()中從函數malloc()返回的時刻,堆棧中將分配多少空間。還有一個假設,即所有需要的內存都被分配了。堆棧上分配多少空間

Here is code

…char A[1000000]… 

int hook() {char C[2000000]; … 
    ptr_char2 = (char) malloc (5000000)); /*Hi guys, how much memory do I have now?*/…… 
} 

int main() { 
    char B[3000000];…… 
    ptr_char = (char*) malloc (4000000)); 
    hook();… 
} 

我知道在堆棧上存儲靜態分配的變量。動態分配在堆上。我試圖計算字符A(0.9MB)+字符B(1.9)+字符C(2.8),大約需要5.6MB。但正確的答案是以下1MB,5MB或9MB之一。有人可以幫我解決我犯的錯誤嗎?先謝謝你。

+0

你應該在問題中包含代碼*逐字*,請相應編輯,謝謝! –

+0

你好,歡迎來到Stackoverflow。本網站提供問題和答案,以便他們可以在未來對其他人有用。爲此,您需要發佈實際的代碼,而不是鏈接到它或它的圖像。 – spectras

+0

好吧,我只是把問題的截圖,但我試圖編輯它。抱歉。 – Kandri6

回答

0

A是靜態的,所以不在堆棧中。

在其最高深度處,調用main並調用hook。所以在這一點上,BC都在堆棧中。

這使得總共5000000字節= 4.76837158203125MB。

+0

是的,所以正確的答案是5MB。存儲字符A在哪裏?謝謝。 – Kandri6

+0

'A'存儲在BSS段中,它不是堆棧段,也不是堆段。查閱「BSS」獲取更多信息。 –

+0

棧中是否有指針變量? 'ptr_char'和'ptr_char2'沒有在函數中定義,但是當然也沒有顯示它們是靜態的......不過,這些選擇的最終結果並不重要。 – ilkkachu