2014-02-25 65 views
2

我不知道我的理解堆棧是如何工作的?堆棧溢出和靜態數組

  1. 有靜態和動態數組,不包括所需要的內存分配的時間之間的性能差異?

    char* data = (char*)malloc(100); 
    char data[100]; 
    
  2. 從我理解的堆棧只有幾MB。爲什麼堆棧有限?爲什麼堆棧和堆,而不是一個地方來存儲內存?

  3. 是否應該動態分配所有數組?例如,在堆棧中有一個大小爲1KB的數組,這是個好主意嗎?

+0

[C++更快:堆棧分配或堆分配](http://stackoverflow.com/q/161053/11683) – GSerg

+0

http://stackoverflow.com/questions/408670/stack-static-and-heap-in-c?rq=1 – Ashalynd

+0

[堆棧和堆什麼和在哪裏?](http:// stackoverflow。com/q/79923/11683) – GSerg

回答

2

有靜態和動態數組,不包括所需要的內存分配的時間之間的性能差異?

性能差異在初始化和任何陣列容量的變化。就元素訪問而言,數組可以隨機訪問是最快的容器。

從我理解的堆棧只有幾MB。爲什麼堆棧有限?爲什麼堆棧和堆,而不是一個地方來存儲內存?

堆棧,動態和程序存儲器是有限的。計算機沒有無限的內存大小。

專用於堆棧或堆的內存量可以由構建環境和操作系統改變。如果一個程序需要更多的內存,它可以向操作系統請求更多(但操作系統可能使用分頁和虛擬內存)。

存在多種類型的存儲區域,因爲變量和數據具有不同的生存期。他們也可能有不同的尺寸。

是否應該動態分配所有數組?例如,在堆棧中有一個大小爲1KB的數組,這是個好主意嗎?

不,分配不改變大小的數組不應該動態分配。較小的數組可以分配爲局部變量;而較大的可能需要位於文件範圍(自動變量)中。根據編譯器或操作系統設置的限制,可能需要在動態內存或操作系統內存中分配巨大的數組。

另外,動態分配常量值數組(如菜單文本或查找表)沒有意義。這些可以放置在只讀存儲區或與可執行文件相同的空間中。

是否有你需要限制數組分配靈活性的原因? (請記住,從嵌入到桌面有很多不同的應用程序。)