Я разрабатываю приложение, чувствительное к задержкам, на C ++. Есть модуль, в котором я использую boost :: unordered_map. Я испытал слишком большую задержку при вставке первой записи на карту, после чего все записи имеют приличное время вставки.
Если я использую std :: unordered_map вместо boost :: unordered_map, этого не произойдет. В этом случае первая вставка также занимает несколько сотен наносекунд (100 ~ 200).
Вот некоторые статистические данные, которые я заметил: - 1-я вставка на карту: около 12 микросекунд (10 ~ 12 микросекунд) - После этого почти все вставки: 200 наносекунд (приблизительно)
Вот пример кода для иллюстрации:
struct timespec _timeSpec ;
long getTimerTime()
{
clock_gettime(CLOCK_REALTIME, &_timeSpec);
return ( 1000000000 * _timeSpec.tv_sec ) + _timeSpec.tv_nsec;
}
int main()
{
int i = 0;
boost::unordered_map < uint64_t , std::pair < uint64_t , bool > > _turnAroundTime ;
while( ++i != 10 )
{
uint64_t t1 = getTimerTime() ;
_turnAroundTime[i] = std::make_pair ( i, true );
uint64_t t2 = getTimerTime() ;
std::cout << "Latency : " << t2 - t1 << std::endl;
}
return 0 ;
}
rehash()
, я писалreserve()
. Они очень разные. - person Richard Hodges   schedule 24.08.2017