C 11 shared ptr效率比較

2022-01-11 09:44:24 字數 1185 閱讀 3805

我實現的網路庫中使用了c++11中的shared_ptr. 昨天做profile,發現很多cpu都消耗在shared_ptr上,所以打算看看shared_ptr的效率如何.

實驗是這樣的,弄乙個臨時的shared_ptr,然後不停的拷貝,拷貝100w次,看消耗多長時間.實驗物件是gcc 4.6.2和clang 3.1(libc++).最後輸出各自消耗的時間,編譯選項,o0和o2.

上**:

#include #include 

#include

#include

#include

long

getmillionsecond()

intmain()

);#endif

long begin_time =getmillionsecond();

std::shared_ptr

p(new

int);

for(int i = 0; i < 100*10000; ++i)

long end_time =getmillionsecond();

#ifdef thread

terminal = true

; t.join();

#endif

std::cout

<< *p

<< end_time - begin_time << "ms"

}

測試結果:

編譯器/優化選項

-o0(單位ms)

-o2(單位ms)

clang

44~49

37~39

clang thread

40~49

31~39

gcc85~92

26~31

gcc thread

87~92

28~33

不太清楚gcc 4.6.2的libstdc++裡面有沒有對單執行緒進行優化,4.7裡面肯定優化了.明天在gcc 4.7上面再試試.

可以看到,開啟優化選項,對兩個實現,都有影響,gcc的優化能力還是比較強.

shared_ptr的效率還好.只是我當時伺服器測試,沒有開啟優化選項,所以100w個訊息,拷貝兩三次的話,還是有一點吃緊.

ps:gcc 4.7的優化,好像跟4.6沒啥差別.....

C 11 shared ptr概念及用法

c 11模板庫 include shared ptrptr new t t 可以是 int char 類等各種型別gnu g 的標準庫中還沒有支援,需使用boost include每個 shared ptr 物件在內部指向兩個記憶體位置 ptr.use count 1 使用空引數建構函式構造 std...

C 11 shared ptr(智慧型指標)詳解

要確保用 new 動態分配的記憶體空間在程式的各條執行路徑都能被釋放是一件麻煩的事情。c 11 模板庫的 標頭檔案中定義的智慧型指標,即 shared ptr 模板,就是用來部分解決這個問題的。只要將 new 運算子返回的指標 p 交給乙個 shared ptr 物件 託管 就不必擔心在 寫dele...

C 11 智慧型指標 shared ptr

shared ptr 是乙個標準的共享所有權的智慧型指標,允許多個指標指向同乙個物件.定義在 memory 檔案中 非memory.h 命名空間為 std.shared ptr 是為了解決 auto ptr 在物件所有權上的侷限性 auto ptr 是獨佔的 在使用引用計數的機制上提供了可以共享所有...