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 意見:
張貼留言