So you have this simple program that creates a std::set
from a file :
#include <fstream>
#include <string>
#include <set>
int main()
{
std::set<std::string> Sdictionnary;
std::set<std::string>::const_iterator it = Sdictionnary.begin();
std::ifstream file("french.txt"); // A file containing 200 000 lines
std::string line;
while(getline(file,line))
{
it = Sdictionnary.insert(it, line);
}
file.close();
return 0;
}
When you launch this program outside of Visual Express, it will start and close in about half a second.
If you launch this program inside Visual Express with the debugger, in Debug or Release mode, it will close 20 to 25 seconds later. If you put a breakpoint, at return 0; you get your 25 seconds just before exit. And if you pause the program during the 25 seconds, Visual Express will go to xmemory :
void deallocate(pointer _Ptr, size_type)
{ // deallocate object at _Ptr, ignore size
::operator delete(_Ptr);
}
This is also happening with std::map
. But not with std::unordered_set
or std::vector
. So the question is, why Visual Express is taking so much time deallocating memory with certain kind of associative containers (sorted ones ??) ?