首頁 > 後端開發 > C++ > 您應該為 C 中的陣列放置預先分配多少記憶體?

您應該為 C 中的陣列放置預先分配多少記憶體?

Patricia Arquette
發布: 2024-12-21 13:34:13
原創
759 人瀏覽過

How Much Memory Should You Pre-allocate for Array Placement-new in C  ?

數組放置新:管理緩衝區分配中的開銷

C 11 標準允許使用放置新進行數組分配,其中內存位置是數組分配手動指定的。然而,在分配期間,可能會向緩衝區大小添加由 x 和 y 表示的未指定的開銷值。這就提出了一個問題,在使用陣列放置新時如何確定要預先分配的記憶體量。

5.3.4 [expr.new] 中提供的標準範例說明了new(buffer) std: :string[10] 將在內部呼叫operator new[](sizeof(std::string) * 10 y, buffer)。這表示開銷值 y 如果非零,可能會導致預先分配緩衝區太小。

修正:標準放置函數的開銷消除

最近引入了一個修復(2019 年11 月的缺陷報告),消除了使用標準佈局函數運算符時未指定的開銷y新[](std :: size_t,void * p)。這意味著此特定放置函數的開銷始終為零。

自訂放置函數的影響

雖然標準放置函數的開銷已被刪除,但它使用自訂放置函數時仍然是一個潛在的問題。對於這種情況,重要的是不要依賴特定的開銷值。相反,建議實作一個自訂放置數組新函數,該函數可以動態確定運行時的開銷。

透過檢查自訂放置數組新函數中 n 的值並將其與指定的緩衝區限制進行比較,人們可以推斷特定平台的開銷並相應地調整緩衝區分配。

結論

使用陣列時放置新功能,了解與自訂放置功能相關的潛在開銷至關重要。實作一個自訂放置數組新函數,可以檢測運行時的開銷,確保分配正確的記憶體量並避免潛在的分配失敗。

以上是您應該為 C 中的陣列放置預先分配多少記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板