2015-10-12 51 views
2

當內存被動態分配時,它是否存儲在堆中,而不管它在哪裏被聲明?例如,如果在main()內聲明以下代碼行()動態分配的內存存儲說明

int * p = new int [100000];

將內存從堆棧或堆棧分配?

如果在全局範圍內做出同樣的聲明,將從堆中獲取內存。但我讀到動態分配的內存存儲在堆中,局部變量存儲在堆棧中。因此,當上面的代碼行從主內部執行,這使得它成爲一個局部變量,將從堆棧或堆獲取內存?

+1

非常簡單:如果您使用「新」,內存將從堆中分配。 「p」是一個局部變量 - 它是一個指針,它存儲在堆棧中。它指出的10,000個整數由「新」分配;它們存儲在堆中。 – paulsm4

+1

'p'本身就在堆棧上。它指向在堆中分配的內存。 – interjay

回答

1

我想我會做這樣一個答案:

很簡單:

  • 如果用「新」,記憶會從堆上分配。

  • 「p」是一個局部變量。它是一個指針,它存儲在堆棧中。

  • 它指向的10,000個整數由「新」分配;它們存儲在堆中。

1
int* p = new int[100000]; 

將始終從分配存儲器堆(正確術語是動態存儲)。這意味着使用newnew[]

只有指針變量本身會分別獲得靜態存儲分配main()以外的本地存儲。