簡體   English   中英

為大型本地數據處理擴展堆棧的大小是一個好主意嗎?

[英]Is it a good idea to extend the size of the stack for large local data processing?

我的環境是gcc,C ++,Linux。 當我的應用程序進行一些數據計算時,它可能需要一個“大”(可能是幾MB)的內存數來存儲數據,計算結果和其他東西。 我使用了一些新的代碼, 刪除來完成這個。 由於在某些功能范圍之外沒有所有權,我認為所有這些內存都可以在堆棧中分配。

問題是,默認堆棧大小(我的系統中為8192Kb)可能不夠。 我可能需要更改這些堆棧分配的堆棧大小。 更重要的是,如果將來計算需要更多數據,我可能需要再次擴展堆棧大小。

那么擴展堆棧大小是一種選擇嗎? 由於無法為特定功能分配,它將如何影響整個應用程序? 在堆棧上而不是在堆上分配數據真的是一種改進嗎?

你提出了一個沒有直接答案的有爭議的問題。 每一方都有利弊。 尤其是:

  1. 堆上的內存更容易控制:您可以檢查返回值或允許拋出異常。 當堆棧溢出時,您的線程將被卸載,並且調試器不會顯示任何有意義的更改。

  2. 相反,堆棧分配會自動發生,您無需執行任何特定操作。 我總是喜歡這種簡單。

在堆棧上分配大量數據沒有任何根本錯誤。 在一天結束時,任何類型的內存最終都是一個內存。 這意味着所需內存的總量才是真正重要的。 分配這種內存的地方不太重要。 當有足夠的內存供您的應用程序工作時,分配內存沒有區別。 例如,它可以是靜態的。

不同的系統具有不同的分配規則。 這意味着最終決定可能取決於實際系統。

雖然堆棧分配確實更有效(在多線程程序中更明顯),但如果你的情況下的使用模式是“分配大量內存,處理數據,解除分配”,那么就不會有很多改進。

而是重寫代碼以使用RAII,例如std::vectorstd::unique_ptr因此不會有明確的bug錯誤delete

如果使用Linux,則可以使用ulimit命令更改堆棧大小。 但是,我認為從堆中分配的內存也對你有好處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM