![](/img/trans.png)
[英]Moving to uninitialized memory, or how raw_storage_iterator works
[英]What is the raw_storage_iterator component uses/advantages in C++
我正在閱讀關於raw_storage_iterator組件的TC ++ PL。 使用此組件可以獲得性能優勢,因為它可以避免分配(更昂貴)並使用復制構造。 在我看來它應該在序列/容器中使用,在那里我們可以有大量的元素,因此賦值調用的數量可能會產生很大的影響。
理論上它很明確,它在我看來這個組件對容器類型類很有用。 但是,我想了解我們應該在位詳細信息中使用此組件(帶有實際示例)以獲得其性能優勢?
在cppreference上有示例代碼。
您可以通過多種機制分配未初始化內存的對齊塊。 Cppreferences使用std::get_temporary_buffer<T>
來分配這樣的緩沖區。
然后,您可以指向這些元素。 指針的類型有點誤導,因為它不是指向有效 T
的指針,而是指向適合構造T
的內存塊。
std::raw_storage_iterator
可以用該T*
填充並告知輸出到它。 然后,您可以將該迭代器提供給需要傳統輸出迭代器的算法,並且順利進行。
如果您嘗試在沒有raw_storage_iterator
情況下執行此操作, raw_storage_iterator
分配給未構造的T
,這是未定義的行為。 作為替代方案,您可以在輸出T
之前構造T
- 但這是浪費的,因為它構造對象兩次。
基本思想是允許在標准算法中使用接近完美效率的未初始化輸出緩沖區。 除了一些嚴格的代碼微優化之外,你不應該使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.