KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've come up across a strange behaviour of std::set. Here is the code: #include <cstdio> #include <windows.h> #include <stdlib.h> #include <vector> #include <set> using namespace std; int main(int argc, char *argv[]) { set<int> b[100]; for (int o=0; o<10; o++) { int tt = GetTickCount(); for (int i=0; i<5000000; i++) { b[o].insert(i); } tt = GetTickCount() - tt; b[o].clear(); printf("%d\n", tt); } return 0; } I'm running on Windows XP. Here is the interesting part: this first printed time is about 3500 ms, while all next are over 9000 ms! Why is that happening? Oh, and this only happens on release version (-O2 optimization). It doesn't happen on Linux (after changing code to compile there). One more thing: when I run it while profiling with Intel VTune it always takes about 3000 ms, so it's the way it should be. UPDATE: Here is some new code: #include <cstdio> #include <windows.h> #include <stdlib.h> int main(int argc, char *argv[]) { const int count = 10000000; int **a = new int*[count]; for (int o=0; o<10; o++) { int ttt = GetTickCount(); for (int i=0; i<count; i++) { a[i] = new int; *a[i] = i; } int ttt2 = GetTickCount(); for (int i=0; i<count; i++) { int r1 = rand() * 10000 + rand(); int r2 = rand() * 10000 + rand(); r1 = r1%count; r2 = r2%count; int *e = a[r1]; a[r1] = a[r2]; a[r2] = e; } int ttt3 = GetTickCount(); for (int i=0; i<count; i++) { delete a[i]; } int ttt4 = GetTickCount(); printf("%d %d\n", ttt2-ttt, ttt4-ttt3); } return 0; } This is the same problem. What happens is I allocate many many small objects and then delete the
Tags (comma-separated)
Save Edits
Cancel