[問題] vector emplace_back() 花費時間問題
開發平台(Platform): (Ex: Win10, Linux, ...)
Linux
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
問題(Question):
我用以下的程式碼來測量vector emplace_back(int)所需要的時間,
為了避免vector重新分配記憶體多花的時間,
我先用reserve()將vector的容量調到我需要的大小:
#include <iostream>
#include <vector>
uint64_t get_tscp()
{
uint64_t a, d;
__asm__ volatile("rdtscp" : "=a"(a), "=d"(d));
return (d << 32) | a;
}
int main()
{
std::vector<int> v;
int size = 4096;
v.reserve(size);
for (int i = 0; i < size; ++i)
{
auto t1 = get_tscp();
v.emplace_back(i);
auto t2 = get_tscp();
std::cout << (t2 - t1) / 2.6 << std::endl;
}
return 0;
}
結果我發現emplace_back(int)所花費的時間大多在15ns上下,
但在第1021、2045、3069次loop,花費的時間突然暴增到2us左右,
請問各位大神有沒有什麼想法可以指點一下小弟,怎麼解釋這種情形?
感恩。
--
生死去來,棚頭傀儡,一線斷時,落落磊磊。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.153.109 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1641913630.A.26C.html
→
01/11 23:18,
2年前
, 1F
01/11 23:18, 1F
→
01/11 23:22,
2年前
, 2F
01/11 23:22, 2F
推
01/12 02:41,
2年前
, 3F
01/12 02:41, 3F
→
01/12 02:41,
2年前
, 4F
01/12 02:41, 4F
→
01/12 02:41,
2年前
, 5F
01/12 02:41, 5F
→
01/12 02:47,
2年前
, 6F
01/12 02:47, 6F
→
01/12 03:09,
2年前
, 7F
01/12 03:09, 7F
→
01/12 03:10,
2年前
, 8F
01/12 03:10, 8F
→
01/12 03:12,
2年前
, 9F
01/12 03:12, 9F
→
01/12 03:14,
2年前
, 10F
01/12 03:14, 10F
推
01/12 07:45,
2年前
, 11F
01/12 07:45, 11F
→
01/12 10:47,
2年前
, 12F
01/12 10:47, 12F
→
01/12 10:48,
2年前
, 13F
01/12 10:48, 13F
→
01/12 10:50,
2年前
, 14F
01/12 10:50, 14F
→
01/12 10:51,
2年前
, 15F
01/12 10:51, 15F