gpt4 book ai didi

c++ - Visual C++ Express、调试器、排序关联容器和内存释放

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:44 26 4
gpt4 key购买 nike

所以你有这个简单的程序,它从一个文件创建一个 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 中启动此程序,在调试或 Release模式下,它将在 20 到 25 秒后关闭。如果你放置了一个断点,在 return 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_setstd::vector。所以问题是,为什么 Visual Express 花这么多时间用某些类型的关联容器(排序的??)释放内存?

最佳答案

你在 watch 窗口有什么表情吗?

观察表达式时,调试器必须定期检查程序是否进入了定义表达式的上下文。因此,它大大减慢了执行速度。调试其他东西或什至另一个程序时输入的旧表达式可能留在那里,因此请查看监 window 口并删除所有内容。

这个建议也适用于条件断点。

关于c++ - Visual C++ Express、调试器、排序关联容器和内存释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1775394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com