首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

STL里list和vector性能差异与疑似内存泄漏有关问题

2012-09-10 
STL里list和vector性能差异与疑似内存泄漏问题最近在项目中debug退出后,VS的Output面板会输出大量内存泄漏

STL里list和vector性能差异与疑似内存泄漏问题

最近在项目中debug退出后,VS的Output面板会输出大量内存泄漏的信息。经过排查,居然发现是使用了std::list的原因!

然而通过MSDN上一些前辈的讨论,得知List并没有真正导致内存泄漏,而是VS本身的 _CrtDumpMemoryLeaks()函数的执行位置的问题。

具体可以参考如下文章:

http://social.msdn.microsoft.com/Forums/da-DK/vclanguage/thread/cfafbb87-d4fb-4c8a-a89c-36c9d0d0bfc6

奇怪的是,如果把list换成vector,所有内存泄漏的问题都消失了。

list的push_back的实现会导致内部使用大量动态内存分配,而vector也会在动态增长连续内存长度的同时进行内存复制。

那么在需要大量push_back的情况下究竟哪个性能会比较好?

于是我做了如下测试。我做的是一个图形程序,程序运行的帧数可以很好的展示性能。

测试环境:

VS2008,Win7 64位,Intel i7处理器。

测试代码很简单,在每一帧渲染代码中只填写如下代码:

    m_listTest.clear();    for (int i = 0; i < 100000; ++i)    {        int iTest;        m_listTest.push_back(iTest);    }         for (int it = 0; it < m_listTest.size(); ++it)    {        int tets = m_listTest[it];    }
在debug模式下,当m_listTest类型为vector时,该代码能使程序FPS达到19.也就是说,相对于插入操作,下标遍历的性能消耗几乎可以无视。

这样的测试结果也很让我意外。我一直以为如果数据要做频繁的插入操作应该首选list。
是时候抛弃list了吗 ?...


热点排行