我有一个问题,我无法在网上找到答案......
我有一个声明如下:
set<unsigned int> MySet
我正在插入由mersenne twister生成的一百万个随机数。随机生成和插入非常快(大约一百万个数字),但释放速度非常慢(1分半钟)。
为什么解除分配这么慢?我没有使用任何自定义析构函数。
答案 0 :(得分:7)
在发布模式下编译代码。
这有两件事。
请注意,此信息与DevStudio有关。
答案 1 :(得分:1)
可能因为以牺牲释放为代价来优化分配更有意义,因为许多应用程序在没有解除分配的情况下进行分配,但反之亦然。我自己在一个混合调用malloc
和free
的应用程序中看到了类似的模式(而不是同时分配和释放所有内容)。
我从来没有写过堆分配器,所以我不知道是否有更深层次的技术原因。解除分配时,必须找到并合并相邻的自由块。所以这项工作从根本上说是不同的。
100万小free()
的声音非常慢,90秒。我从来没有真正编写Windows,所以我不能说这是不正常的,但系统应该能够做得更好。
您的问题的解决方案可能只是在程序退出之前跳过释放对象。您可以尝试从std::allocator< unsigned int >
派生自定义分配器,这会使deallocate
成为无操作。