C++ stl list 获取size()函数非常慢,跟shi一样,生产环境中使用被坑了,有时间看一下源码,严重怀疑是现算的。
#include <iostream>
#include <list>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <memory.h>
using namespace std;
typedef long long __int64;
typedef __int64 INT64;
static inline INT64 GetSystemTime()
{
struct timeb loTimeb;
memset(&loTimeb, 0 , sizeof(timeb));
ftime(&loTimeb);
return ((INT64)loTimeb.time * 1000) + loTimeb.millitm;
}
int main()
{
INT64 start, end;
start = GetSystemTime();
std::list<int> msglist;
for(int i=0;i<2000000; i++)
{
msglist.push_back(i);
}
end = GetSystemTime();
cout<< " time = "<< end - start<<endl;
start = GetSystemTime();
for(int i=0;i<1000;i++)
{
msglist.size();
}
end = GetSystemTime();
cout<< " time = "<< end - start<<endl;
start = GetSystemTime();
int id;
while(!msglist.empty())
{
id = msglist.front();
msglist.pop_front();
}
end = GetSystemTime();
cout<< " time = "<< end - start<<endl;
return 0;
}
[xx@localhost ThreadSafe]$ g++ testList.cpp -o list
[xx@localhost ThreadSafe]$
[xx@localhost ThreadSafe]$
[xx@localhost ThreadSafe]$
[xx@localhost ThreadSafe]$ ./list
time = 584
time = 12247
time = 132

本文通过实验展示了C++ STL中list容器的size()函数性能问题。实验表明,在大量数据的情况下,调用size()函数消耗的时间远超预期,这可能是因为该函数在每次调用时都需要遍历整个list来计算元素数量。
2001

被折叠的 条评论
为什么被折叠?



