国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

編譯器對標準庫優化小測試

2019-11-17 05:13:04
字體:
來源:轉載
供稿:網友

  《C++沉思錄》上面有一句話說,盡量使用標準庫(其實是指STL),因為編譯器可以對標準庫的代碼進行優化。我們可以做個測試來證實這句話,如下的代碼:

#include

#include

#include

#include

using namespace std;

#define TESTNUM 1000000

#define STRINGLENGTH 1000

string CreateString()

{

string s;

for (int i = 0; i < STRINGLENGTH; ++i)

{

s += char(rand()%255+1);

}

return s;

}

template inline

void MySwap(_Ty& _Left, _Ty& _Right)

{ // exchange values stored at _Left and _Right

_Ty _Tmp = _Left;

_Left = _Right, _Right = _Tmp;

}

int main()

{

vector box;

vector box2;

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

{

box.push_back(CreateString());

box2.push_back(NULL);

}

{

clock_t t1 = clock();

for (int i = 0; i < TESTNUM; ++i)

{

MySwap(box[rand()%100], box[rand()%100]);

}

cout << clock() - t1 << endl;

}

{

clock_t t1 = clock();

for (int i = 0; i < TESTNUM; ++i)

{

MySwap(box2[rand()%100], box2[rand()%100]);

}

cout << clock() - t1 << endl;

}

{

clock_t t1 = clock();

for (int i = 0; i < TESTNUM; ++i)

{

swap(box[rand()%100], box[rand()%100]);

}

cout << clock() - t1 << endl;

}

return 0;

}

  MySwap實際上就是從STL里面原樣拷貝出來的,但是我們可以看到這和STL的Swap效率有天壤之別。因為string實際上一些必要的信息加上字符串緩存構成的,對于STL的Swap,編譯器知道只需要交換那些必要信息就可以了,而不需要進行深拷貝;但是對于我們寫的MySwap,編譯器不知道,所以進行了深拷貝。Swap比交換指針慢一點是因為string的必要信息比一個指針多一些。假如增加測試字符串的長度,會發現Swap的耗時是不變的,而MySwap的耗時會線形增加。

  所以我們大可不必因為恐慌string的深拷貝,而在vector里面使用string的指針。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹江口市| 汝南县| 县级市| 齐齐哈尔市| 望城县| 醴陵市| 永修县| 云龙县| 皮山县| 千阳县| 新邵县| 武隆县| 岳西县| 通榆县| 福建省| 麦盖提县| 贞丰县| 莲花县| 岳普湖县| 来凤县| 承德县| 益阳市| 佛坪县| 会泽县| 自治县| 拜泉县| 轮台县| 华容县| 广安市| 石泉县| 武陟县| 克东县| 胶州市| 亚东县| 乐清市| 五大连池市| 保靖县| 松原市| 雷波县| 新和县| 佛坪县|