开发平台(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左右,
请问各位大神有没有什么想法可以指点一下小弟,怎么解释这种情形?
感恩。