原貼:
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...靜態分配和動態分配
靜態分配記憶體和動態分配記憶體
靜態分配和動態分配記憶體的區別