Stack與Heap的區別

Stack:由編譯器來分配釋放記憶體空間,例如函數的參數值,局部變數的值,例如:
char p1 = "1234";
char* p2 = "1234";
char p3[] = "1234";
// 以上都是由編譯器分配空間給它們,所以空間的大小會由編譯器所控制...
// 所以
char p4[100000000][10000000000];
// 如果編譯器所能分配的空間不夠大,那麼p4就會無法使用!
// 通常編譯器都會有選項可以修改就是。char p1 = "1234";
char* p2 = "1234";
char p3[] = "1234";
// 以上都是由編譯器分配空間給它們,所以空間的大小會由編譯器所控制...
// 所以
char p4[100000000][10000000000];
// 如果編譯器所能分配的空間不夠大,那麼p4就會無法使用!
// 通常編譯器都會有選項可以修改就是。

Heap:就是由程式員自己去分配釋放記憶體空間,像是malloc,new,但是有分配就一定要釋放,所以要free,delete。分配的方式是類似用串列。
char* p1 = (char*)malloc(sizeof(char) * 10);
char* p2 = new char[10];
// 有分配就一定要釋放
free(p1);
delete[] p2;

另外,以效率而言,Stack是比Heap還快的,不過由於Stack是由編譯器控制,所以無法控制,Heap的效率雖然慢了點,但是自由度高,但是危險性也相對的高。

網路上有個比喻覺得很不錯,stack就像上餐廳吃飯一樣,點菜,然後吃,最後付錢,我們不用管他到底是如果切菜,煮菜,儘管吃就對了,Heap就像自己煮菜切菜一樣,什麼都自己來,當然,碗盤也是要自己清理囉!

更詳細的內容請到 http://blog.cnii.com.cn/?92337/viewspace-18177.html 閱讀。

0 意見:

張貼留言