2017-11-11 267 views
0

當我們聲明C中的陣列...陣列基本上是存儲有該數組的基地址..數組存儲在C中的位置?

對於離指針:

int *x=malloc(5); 

給出用於堆該陣列的「x」的存儲器現在

,我的問題是that..where沒有內存將被分配給這種類型的數組聲明

int x1[5]; 

假設兩個「X」 &'x1'在函數中聲明。

'x1'在哪裏記憶。 它在堆棧中嗎?或在堆?

+4

對於'x1'來說真的取決於定義的作用。還要注意,C規範並沒有提到任何有關「堆棧」或「堆棧」的內容。 *本地*變量*通常*最終在堆棧上只是一個實現細節。 –

+1

還要注意,如果'x'被定義爲一個函數中的局部變量,那麼您有兩個*分配:一個用於變量'x'本身,另一個用於調用'malloc'分配的內存。談到'malloc',C規範並沒有真正說出「堆」在哪裏或哪種內存。 –

+0

'當我們在C ...數組中聲明一個數組時,基本上是一個存儲在該數組的基地址中的指針'no。 –

回答

-1

如果int x1[5];未在任何函數中定義,則數組x1位於程序的bss段上,變量x1是全局數組。

如果在任何函數中定義了int x1[5];,則在執行此函數期間,數組x1在您的程序堆棧中。

+0

是否有任何方法來使用函數中聲明的指針在堆棧中分配內存? –

+0

請回答上面的意見 –

0

我相信int x1[5];進入堆棧。

+2

C標準沒有提到堆棧。實現C標準對具有自動存儲持續時間的對象所要求的行爲的常見方式是使用堆棧,並且如果使用調試器或其他方式進行檢查,則可以在堆棧中找到許多對象。但是C實現可能使用其他方法。對於這樣一個小陣列,它可能完全保留在寄存器中。 –