數組放置新:管理緩衝區分配中的開銷
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中文網其他相關文章!