我不知道我的理解堆棧是如何工作的?堆棧溢出和靜態數組
有靜態和動態數組,不包括所需要的內存分配的時間之間的性能差異?
char* data = (char*)malloc(100); char data[100];
從我理解的堆棧只有幾MB。爲什麼堆棧有限?爲什麼堆棧和堆,而不是一個地方來存儲內存?
是否應該動態分配所有數組?例如,在堆棧中有一個大小爲1KB的數組,這是個好主意嗎?
我不知道我的理解堆棧是如何工作的?堆棧溢出和靜態數組
有靜態和動態數組,不包括所需要的內存分配的時間之間的性能差異?
char* data = (char*)malloc(100);
char data[100];
從我理解的堆棧只有幾MB。爲什麼堆棧有限?爲什麼堆棧和堆,而不是一個地方來存儲內存?
是否應該動態分配所有數組?例如,在堆棧中有一個大小爲1KB的數組,這是個好主意嗎?
有靜態和動態數組,不包括所需要的內存分配的時間之間的性能差異?
性能差異在初始化和任何陣列容量的變化。就元素訪問而言,數組可以隨機訪問是最快的容器。
從我理解的堆棧只有幾MB。爲什麼堆棧有限?爲什麼堆棧和堆,而不是一個地方來存儲內存?
堆棧,動態和程序存儲器是有限的。計算機沒有無限的內存大小。
專用於堆棧或堆的內存量可以由構建環境和操作系統改變。如果一個程序需要更多的內存,它可以向操作系統請求更多(但操作系統可能使用分頁和虛擬內存)。
存在多種類型的存儲區域,因爲變量和數據具有不同的生存期。他們也可能有不同的尺寸。
是否應該動態分配所有數組?例如,在堆棧中有一個大小爲1KB的數組,這是個好主意嗎?
不,分配不改變大小的數組不應該動態分配。較小的數組可以分配爲局部變量;而較大的可能需要位於文件範圍(自動變量)中。根據編譯器或操作系統設置的限制,可能需要在動態內存或操作系統內存中分配巨大的數組。
另外,動態分配常量值數組(如菜單文本或查找表)沒有意義。這些可以放置在只讀存儲區或與可執行文件相同的空間中。
是否有你需要限制數組分配靈活性的原因? (請記住,從嵌入到桌面有很多不同的應用程序。)
[C++更快:堆棧分配或堆分配](http://stackoverflow.com/q/161053/11683) – GSerg
http://stackoverflow.com/questions/408670/stack-static-and-heap-in-c?rq=1 – Ashalynd
[堆棧和堆什麼和在哪裏?](http:// stackoverflow。com/q/79923/11683) – GSerg