陣列的靜態分配和動態分配

2021-08-21 17:39:14 字數 620 閱讀 1173

原貼:

1、在使用陣列前用new表示式動態分配陣列空間,new表示式在堆中分配空間,但是new之後還需delete,比較麻煩,初學者比較容易忘記,效率較低;而陣列的靜態分配,也就是在陣列宣告時直接在[ ]中指定陣列的長度這種方式的記憶體實在棧上分配,在結束生命週期後自動釋放,效率相對較高,但是棧空間有限。

2、靜態分配的陣列在作用域結束後記憶體就被釋放了,所以不能夠用做函式的返回值。而動態分配的陣列生命週期由程式設計師控制,沒有delete之前一直存在於棧中,可用於函式返回值。我們可以這樣理解,因為靜態陣列是在棧中申請的,而函式中的區域性變數也是在棧中的,而new動態陣列是在堆中的分配的,所以函式返回後,棧中的東西被自動釋放,而堆中的東西如果沒有delete不會自動釋放。

網上找的乙個例子:

int *test(int *b)  //b可以是靜態陣列的陣列名,也可以是動態陣列的首位址

int main()

;即也可以是靜態陣列

int *c=test(b);     //將b作為引數,呼叫test函式,返回值賦給c

for(int i=0;i<5;i++)    //輸出test返回的陣列的各項

cout<<*(c+i)<<" ";

cout

}

靜態分配和動態分配

記憶體的靜態分配和動態分配的區別主要是兩個 一是時間不同。靜態分配發生在程式編譯和連線的時候。動態分配則發生在程式調入和執行的時候。二是空間不同。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式 靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由函式malloc進行分配...

靜態分配記憶體和動態分配記憶體

首先,在使用動態分配記憶體技術前,必須明白自己在做什麼,這樣做與其它的方法有什麼不同,特別是會產生哪些負面影響,天下沒有免費的午餐。動態分配記憶體與靜態分配記憶體的區別 1 靜態記憶體分配是在編譯時完成的,不需要占用cpu資源 動態分配記憶體是在執行時完成的,動態記憶體的分配與釋放需要占用cpu資源...

靜態分配和動態分配記憶體的區別

說白了,記憶體的靜態分配和動態分配的區別主要是兩個 一是時間不同。靜態分配發生在程式編譯和連線的時候。動態分配則發生在程式調入和執行的時候。二是空間不同。堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式 靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由函式malloc...