簡體   English   中英

auto_ptr與shared_ptr的性能

[英]Performance of auto_ptr vs. shared_ptr

我沒有找到有關auto_ptrshared_ptr的性能問題的信息(我使用tr1實現)。 由於shared_ptr比auto_ptr更為復雜,因此auto_ptr更快嗎? 因此,通常的問題聽起來像是說與shared_ptr相比,shared_ptr的性能如何?

PS:我知道現在unique_ptr比auto_ptr更可取,但並非所有編譯器都支持它,因此問題在於auto_ptr和shared_ptr

  1. 取消引用時,沒有性能差異。

  2. 如果使用make_shared分配了shared_ptr,則不會浪費任何堆分配。

  3. 復制指針(而不是對象)時,shared_ptr會慢一點,因為它需要增加其引用計數器。

但是,這些可能無關緊要,因此請堅持將shared_ptr與make_shared結合使用。

auto_ptr是已棄用的C ++ 98構造。 因此,您不應該再在新編寫的C ++ 11代碼中使用它,而改為在編譯器/庫維護者unique_ptr來實現對unique_ptr支持,這可能會大大抵消它可能帶來的任何性能優勢。

話雖這么說,請使用語義上適合您的用例的語言,除非您已剖析 *_ptr存在問題...

通常,唯一的好答案是測量

但是對於這種情況,您知道shared_ptr ,除非您使用make_shared ,否則它涉及計數器塊的動態分配,並且除非您有一個非常好的小對象分配器,否則創建它一定很慢(談論數量級)。指向對象的第一個共享指針。

但是隨后,也許借助Boost和標准庫,分配就得到了真正的優化。 也許,可能!,您可以使用make_shared對對象及其控制塊僅使用1個分配。 所以... 衡量

順便提一下, auto_ptr已棄用。

對於任何現代編譯器,請改用unique_ptr

與所有性能問題一樣:您需要在特定的設置中自行衡量。

但是,通常來說,您可以期望shared_ptr<>開銷要比auto_ptr<>開銷大,因為它必須在后台做更多的工作來確保封閉指針的正確共享行為。

另一方面,兩者之間並沒有真正的可比性: auto_ptr<>僅支持一個副本(所有權在副本上轉移),而shared_ptr<>支持多個副本。 因此,除非僅將上述指針用於一個復制指針,否則無法進行有意義的比較。 如果確實使用單拷貝指針,並且確定不需要更多副本,請使用專用的auto_ptr<>

無論如何,性能差異是否顯着取決於您的特定項目。

暫無
暫無

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

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