std::set
所以你有这个从文件创建一个简单的程序:
#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;
}
当您在 Visual Express 之外启动此程序时,它将在大约半秒内启动和关闭。
如果使用调试器在 Visual Express 中启动该程序,在 Debug 或 Release 模式下,它将在 20 到 25 秒后关闭。如果放置断点,则返回 0;你在退出前得到你的 25 秒。如果您在 25 秒内暂停程序,Visual Express 将转到 xmemory :
void deallocate(pointer _Ptr, size_type)
{ // deallocate object at _Ptr, ignore size
::operator delete(_Ptr);
}
这也发生在std::map
. 但不是用std::unordered_set
or std::vector
。所以问题是,为什么 Visual Express 花费如此多的时间来使用某种关联容器(排序的容器??)释放内存?