g++ 1000 times slower than visual studio using lists?

Viewed 417

Consider the following code snippet:

#include <iostream>
#include <ctime>
#include <vector>
#include <list>
using namespace std;

#define NUM_ITER 100000

int main() {
    clock_t t = clock();
    std::list< int > my_list;
    std::vector< std::list< int >::iterator > list_ptr;

    list_ptr.reserve(NUM_ITER);

    for(int i = 0; i < NUM_ITER; ++i) {
        my_list.push_back(0);
        list_ptr.push_back(--(my_list.end()));
    }

    while(my_list.size() > 0) {
        my_list.erase(list_ptr[list_ptr.size()-1]);
        list_ptr.pop_back();
    }

    cout << "Done in: " << 1000*(clock()-t)/CLOCKS_PER_SEC << " msec!" << endl;
}

When I compile and run it with visual studio, all optimizations enabled, I get the output:

Done in: 8 msec!

When I compile and run it with g++, using the flags

g++ main.cpp -pedantic -O2

I get the output

Done in: 7349 msec!

Which is rougly 1000 times slower. Why is that? According to the "cppreference" calling erase on a list is supposed to use up only constant time.

The code was compiled and executed on the same machine.

2 Answers
Related