青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 7,  comments - 64,  trackbacks - 0

記得以前在一本書上看過boost::shared_ptr的回帶來一定的效率損失,但是并不大.今天閑來無事,編譯了一個BOOST并簡單測試了一下,看看到底有多少性能損失.測試代碼和結果如下:

比較函數
template <class T>
class compareP
{
public:
        bool operator() (const T lh,const T rh) const
        {
                return *lh<*rh;
        }

};


boost:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<boost::shared_ptr<string>,size_t,compareP<boost::shared_ptr<string> > > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                boost::shared_ptr<string> pstr(new string);
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

boost結果:
2000
2015
2015
2016
2017


指針:
int _tmain(int argc, _TCHAR* argv[])
{
        DWORD oldtime = GetTickCount();
        typedef map<string*,size_t,compareP<string*> > container_type;
        typedef container_type::iterator iterator;
        container_type container;
        for (size_t i(0) ; i<500000 ; ++i)
        {
                string *pstr = new string;
                char buffer[32];
                *pstr = itoa(i,buffer,10);
                container[pstr]=0;
        }
        cout<<GetTickCount() - oldtime <<endl;
return EXIT_SUCCESS;
}

指針結果:
937
938
954
953
953

執行速度已經相差一倍了.自動內存管理的代價啊!~~~~
環境:Q8200 2.33GHZ 4G內存

以上只是簡單的測試,僅拱參考


補充說明:

很多朋友流言說在MAP中存放string*沒有意義。可是我上一個項目就需要這么做。

試想我現在有10篇文檔,現在需要統計每篇文檔當中每個字出現的次數,還需要統計全部文章中全部字出現的次數。為了保證效率,應當保證每個字在內存當中只留一份拷貝(因為以后有可能統計每個詞,甚至每句話出現的次數)。要實現這個功能,是否還有更好的算法?


還有朋友流言說指針版沒有銷毀string指針??墒窃谶@個程序中執行cout<<GetTickCount() - oldtime <<endl;之前shared_ptr也沒有釋放資源。所以資源的釋放不會造成誤差。

luck朋友的方法最為有效,把比較函數變成:

bool operator() (const T &lh,const T &rh) const

        {

                return *lh<*rh;

        }

下面是shared_ptr執行5次的時間:

968

969

985

969

969


下面是string*執行5次的時間:

859

875

860

859

860


看來即使是小對象也不能放松!當很多小對象發生構造和析構時所耗費的時間還是不容小視的!~

posted on 2009-06-30 21:09 HIT@ME 閱讀(3835) 評論(14)  編輯 收藏 引用

FeedBack:
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-06-30 21:35 | skyscribe
你舉的這個例子不具有典型性,實際中寫出這樣的代碼,應該是需要再好好斟酌,誰會把shared_ptr作為map的索引呢?
應該舉一個更切合實際的例子,譬如map的第二個字段是shared_ptr類型。
另外你的代碼有沒有把所有的優化都用上,強迫inline展開?  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-06-30 23:31 | HIT@ME
我最近做的一個項目就需要把string*作為map的索引(比如統計文章中重復出現的單詞數)。另外,是否強迫inline展開并不重要。因為主要說明shared_ptr確實對效率有影響,不是為了加快整個程序的執行效率。
明天我去公司再試試看把map換成vector,不過估計結果也差不多~@skyscribe
  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-01 08:49 | 遠古毛利人
樓主是否在Release下測試的?  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-01 08:50 | Kevin Lynx
這個測試例子確實有問題。把一個對象(shared_ptr)和一個指針(string*)分別作為map的key,對象肯定會比指針慢。對象用于map的key會涉及到很多復制操作。  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-01 09:10 | null
想不出來你為什么要用(string*)做key,既然用了指針,那肯定不是為了排序,如果是為了查找,那應該用hash_map(boost::unordered_map)  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-01 09:29 | zuhd
用指針做key有什么意義呢?它和int做索引有什么區別?  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-01 14:34 | test
主要是你的那個字符串太小了,相比較shared_ptr的構造計數等動作耗時差不多。所以才會差一倍。  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-02 11:42 | luck
指針版的沒有銷毀string的指針  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-02 17:52 | luck
把compareP類的操作符bool operator() (const T lh,const T rh) const
的參數改為引用傳遞就會減少很大部分的差別  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-03 13:47 | 唐新發
下面的測試顯示shared_ptr相對于使用原始指針會慢上很多(2-4倍),主要是來自引用計數及其帶來的指針對象的創建銷毀時間,下面的測試代碼都是指針創建及傳遞操作:

#include <windows.h>
#include <cassert>
#include <iostream>
#include <string>
#include <boost/shared_ptr.hpp>

typedef int type;
typedef type* raw_ptr_type;
typedef boost::shared_ptr<type> shared_ptr_type;

template<typename T>
void use(T ptr)
{
T ptr1 = ptr;
T ptr2 = ptr;
T ptr3 = ptr;
}

int main(int argc, char* argv[])
{
size_t count = 500000;

if(argc > 1)
count = atoi(argv[1]);

DWORD oldtime, shared_ptr_time, raw_ptr_time;

{
oldtime = GetTickCount();
for (size_t i = 0; i < count ; ++i)
{
raw_ptr_type ptr(new type);
use(ptr);
delete ptr;
}
raw_ptr_time = GetTickCount() - oldtime;
}

{
oldtime = GetTickCount();
for (size_t i = 0; i < count ; ++i)
{
shared_ptr_type ptr(new type);
use(ptr);
}
shared_ptr_time = GetTickCount() - oldtime;
}

assert(raw_ptr_time <= shared_ptr_time);

std::cout << "count(" << count << ") raw_ptr(" << raw_ptr_time << " ms) shared_ptr(" << shared_ptr_time << " ms) diff(+" << shared_ptr_time - raw_ptr_time << " ms, +" << double(shared_ptr_time - raw_ptr_time)/double(raw_ptr_time)*100 << "%)"<< std::endl;

return EXIT_SUCCESS;
}

vc2008下 Release 禁用優化的三次執行:
count(500000) raw_ptr(110 ms) shared_ptr(591 ms) diff(+481 ms, +437.273%)
count(500000) raw_ptr(110 ms) shared_ptr(471 ms) diff(+361 ms, +328.182%)
count(500000) raw_ptr(120 ms) shared_ptr(471 ms) diff(+351 ms, +292.5%)

vc2008下 Release  完全優化的三次執行:
count(500000) raw_ptr(111 ms) shared_ptr(330 ms) diff(+219 ms, +197.297%)
count(500000) raw_ptr(100 ms) shared_ptr(331 ms) diff(+231 ms, +231%)
count(500000) raw_ptr(110 ms) shared_ptr(351 ms) diff(+241 ms, +219.091%)
  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-04 16:28 | 99讀書人網上書城
這個測試例子確實有問題  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2009-07-05 22:50 | 李錦俊
堆中申請內存和銷毀內存是極為耗時的。應該把測試做得更單純一點才對。  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2011-03-26 12:54 | 張立斌
for (size_t i(0) ; i<500000 ; ++i)
{
boost::shared_ptr<string> pstr(new string);
char buffer[32];
*pstr = itoa(i,buffer,10);
container[pstr]=0;
//shared_ptr在此處釋放內存
}
for (size_t i(0) ; i<500000 ; ++i)
{
string *pstr = new string;
char buffer[32];
*pstr = itoa(i,buffer,10);
container[pstr]=0;
//內存泄露
}
如果不信,你可以把string改為自定義的類,并在構造和析構函數中加入輸出。  回復  更多評論
  
# re: 關于boost庫中shared_ptr執行速度的簡單測試
2012-08-30 01:43 | qindh
我測試了share_ptr版式1847,new delete版是104,測試是用的VS2010版本,share_ptr不是用的boost庫,是用的VS2010自帶的  回復  更多評論
  
<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(5)

隨筆檔案

test

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久人人爽人人爽爽久久| 久久精品夜色噜噜亚洲aⅴ | 国产欧美精品在线播放| 欧美日韩调教| 欧美性一二三区| 国产精品一级在线| 国产一区深夜福利| 亚洲第一精品影视| 日韩一级在线| 午夜欧美大片免费观看| 久久婷婷蜜乳一本欲蜜臀| 免费不卡欧美自拍视频| 亚洲激情av在线| 日韩视频免费| 香蕉av福利精品导航| 噜噜噜噜噜久久久久久91| 欧美精品电影在线| 国产精品人人爽人人做我的可爱| 国产欧美一区二区精品婷婷| 精品成人一区二区三区| 中文欧美日韩| 久久久福利视频| 亚洲欧洲精品一区二区| 亚洲欧美一级二级三级| 久久久视频精品| 国产精品成人va在线观看| 一区二区三区在线视频免费观看| 一区二区三区久久精品| 久久婷婷国产综合尤物精品| 亚洲精品美女免费| 久久国产主播| 国产精品欧美久久| 亚洲精品在线免费| 久久久久久九九九九| 日韩视频中文字幕| 巨乳诱惑日韩免费av| 欧美日韩性视频在线| 国际精品欧美精品| 亚洲一区二区三区激情| 久久人人看视频| 亚洲婷婷综合久久一本伊一区| 噜噜噜噜噜久久久久久91| 国产日韩一区二区三区在线播放| 亚洲乱码视频| 欧美成人黑人xx视频免费观看| 亚洲——在线| 国产精品久久久久永久免费观看 | 在线一区二区视频| 狼人社综合社区| 国产欧美一区二区精品性色| 夜夜躁日日躁狠狠久久88av| 欧美+亚洲+精品+三区| 亚洲欧美日韩高清| 国产精品sm| 亚洲无线一线二线三线区别av| 欧美黄色日本| 欧美高清在线| 9色porny自拍视频一区二区| 亚洲国产精品久久久久| 能在线观看的日韩av| 91久久精品国产91久久性色| 欧美成人免费在线观看| 久久亚洲综合色一区二区三区| 国产永久精品大片wwwapp| 久久久xxx| 久久综合国产精品| 亚洲黄色尤物视频| 欧美激情在线狂野欧美精品| 麻豆91精品| 亚洲精品国产精品国产自| 免费美女久久99| 母乳一区在线观看| 日韩视频在线免费观看| 亚洲第一毛片| 欧美另类高清视频在线| 99re在线精品| 一本一本久久| 国产精品综合久久久| 久久久精品网| 欧美成人精品一区二区| 一本一本a久久| 亚洲字幕在线观看| 国内精品久久国产| 亚洲高清电影| 国产精品高潮呻吟久久av无限| 欧美一二三视频| 久久久精品一品道一区| 亚洲国产精品美女| 亚洲美女在线视频| 国产欧美大片| 欧美福利一区| 国产精品v欧美精品∨日韩| 性8sex亚洲区入口| 久久夜色精品国产亚洲aⅴ| 99精品国产一区二区青青牛奶| 一区二区免费看| 亚洲成人在线观看视频| 99热这里只有精品8| 国内精品国语自产拍在线观看| 亚洲欧洲在线视频| 国产精品一区二区在线观看不卡| 欧美暴力喷水在线| 国产精品一区二区久激情瑜伽| 欧美v亚洲v综合ⅴ国产v| 欧美日韩p片| 久久视频免费观看| 欧美三级午夜理伦三级中文幕| 久久久国产精品一区二区中文| 国产亚洲精品综合一区91| 欧美福利小视频| 国产欧美日韩亚洲精品| 欧美激情网友自拍| 国产丝袜美腿一区二区三区| 亚洲日韩成人| 亚洲激情网站免费观看| 羞羞答答国产精品www一本| 一本一本大道香蕉久在线精品| 久久理论片午夜琪琪电影网| 亚洲在线观看| 欧美日韩国产页| 亚洲国产老妈| 亚洲成色777777女色窝| 欧美一区二区在线看| 亚洲在线一区二区| 欧美日韩国产bt| 亚洲精品国产无天堂网2021| 在线观看精品一区| 久久久久久久999精品视频| 久久国产精品亚洲va麻豆| 欧美亚洲第一区| 99xxxx成人网| 亚洲午夜三级在线| 欧美日韩精品一区二区天天拍小说| 女人色偷偷aa久久天堂| 国产日产精品一区二区三区四区的观看方式| 亚洲日韩欧美一区二区在线| 亚洲区一区二| 欧美劲爆第一页| 亚洲国产精品免费| 亚洲剧情一区二区| 欧美日韩xxxxx| 亚洲视频久久| 亚洲欧美在线看| 国产一级久久| 久久偷看各类wc女厕嘘嘘偷窃| 欧美成人午夜激情在线| 亚洲欧洲日韩女同| 欧美日韩精品在线| 小黄鸭精品aⅴ导航网站入口| 久久精品国产视频| 极品少妇一区二区三区精品视频| 久久爱另类一区二区小说| 久久资源在线| 亚洲精选在线观看| 欧美午夜a级限制福利片| 日韩亚洲在线| 午夜精品久久久久久久| 国产区亚洲区欧美区| 久久av最新网址| 欧美激情一级片一区二区| 日韩视频二区| 国产精品久久久久久久久久妞妞| 亚洲影视在线播放| 久久夜色精品国产欧美乱极品| 在线成人免费观看| 欧美电影免费观看| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美日韩中文精品| 国产精品丝袜白浆摸在线| 99精品国产高清一区二区| 日韩视频不卡| 国产精品久久久久国产a级| 亚洲综合精品| 欧美不卡福利| 亚洲免费影院| 一区二区在线看| 欧美巨乳波霸| 久久国产精品免费一区| 欧美国产视频在线观看| 亚洲最新在线| 国产亚洲精品美女| 欧美精品久久天天躁| 欧美在线一级视频| 亚洲精品之草原avav久久| 久久精品色图| 亚洲欧美另类综合偷拍| 亚洲欧洲另类国产综合| 国产视频亚洲| 欧美视频1区| 欧美黑人一区二区三区| 欧美一区二区三区四区在线| 欧美国产视频日韩| 久久一区二区三区国产精品 | 亚洲欧美另类国产| 亚洲国产人成综合网站| 久久精品人人做人人综合| 亚洲视频视频在线| 91久久线看在观草草青青| 国产一区二区三区视频在线观看| 欧美日韩高清在线播放|