當內存被動態分配時,它是否存儲在堆中,而不管它在哪裏被聲明?例如,如果在main()內聲明以下代碼行()動態分配的內存存儲說明
int * p = new int [100000];
將內存從堆棧或堆棧分配?
如果在全局範圍內做出同樣的聲明,將從堆中獲取內存。但我讀到動態分配的內存存儲在堆中,局部變量存儲在堆棧中。因此,當上面的代碼行從主內部執行,這使得它成爲一個局部變量,將從堆棧或堆獲取內存?
當內存被動態分配時,它是否存儲在堆中,而不管它在哪裏被聲明?例如,如果在main()內聲明以下代碼行()動態分配的內存存儲說明
int * p = new int [100000];
將內存從堆棧或堆棧分配?
如果在全局範圍內做出同樣的聲明,將從堆中獲取內存。但我讀到動態分配的內存存儲在堆中,局部變量存儲在堆棧中。因此,當上面的代碼行從主內部執行,這使得它成爲一個局部變量,將從堆棧或堆獲取內存?
我想我會做這樣一個答案:
很簡單:
如果用「新」,記憶會從堆上分配。
「p」是一個局部變量。它是一個指針,它存儲在堆棧中。
它指向的10,000個整數由「新」分配;它們存儲在堆中。
int* p = new int[100000];
將始終從分配存儲器堆(正確術語是動態存儲)。這意味着使用new
或new[]
。
只有指針變量本身會分別獲得靜態存儲分配main()
以外的本地存儲。
非常簡單:如果您使用「新」,內存將從堆中分配。 「p」是一個局部變量 - 它是一個指針,它存儲在堆棧中。它指出的10,000個整數由「新」分配;它們存儲在堆中。 – paulsm4
'p'本身就在堆棧上。它指向在堆中分配的內存。 – interjay