stl 为什么内存不可控
1个回答
2014-01-09
展开全部
STL确实好用。
但每个项目都有自己的场景,可以根据自己的需要选择适合的技术。
不用STL, 不是因为性能,性能不是问题,有时候会了调试、清晰,还会牺牲性能。
有控制的使用STL,主要是有控制的使用map,list,vector这类的容器,
原因是内存碎片。 STL算法,当然可以用了
产生内存碎片的原因是,glibc的stl在底层使用malloc/free来分配内存,
而malloc会带来内存碎片。
我们的服务器要求至少7*24不间断运行,甚至半年都不间断,
所以我们尽量避免在运行过程中使用stl容器。
malloc的实现原理,在这里就不详细描述了
glibc内存管理ptmalloc源代码分析
http://wenku.baidu.com/view/20033e124431b90d6c85c718.html
替代技术:
1.各种对象的new/malloc =>内存沲
2.std::map => 排序数组、侵入式红黑树(参考linux内核中的红黑树实现)
3.std::vector => 数组
4.std::list => 侵入式链表(参考linux内核中的list)、数组
但每个项目都有自己的场景,可以根据自己的需要选择适合的技术。
不用STL, 不是因为性能,性能不是问题,有时候会了调试、清晰,还会牺牲性能。
有控制的使用STL,主要是有控制的使用map,list,vector这类的容器,
原因是内存碎片。 STL算法,当然可以用了
产生内存碎片的原因是,glibc的stl在底层使用malloc/free来分配内存,
而malloc会带来内存碎片。
我们的服务器要求至少7*24不间断运行,甚至半年都不间断,
所以我们尽量避免在运行过程中使用stl容器。
malloc的实现原理,在这里就不详细描述了
glibc内存管理ptmalloc源代码分析
http://wenku.baidu.com/view/20033e124431b90d6c85c718.html
替代技术:
1.各种对象的new/malloc =>内存沲
2.std::map => 排序数组、侵入式红黑树(参考linux内核中的红黑树实现)
3.std::vector => 数组
4.std::list => 侵入式链表(参考linux内核中的list)、数组
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
东莞市友贸实业有限公司_
2023-11-22 广告
2023-11-22 广告
第五代双倍数据速率DDR5双列直插式内存模块是一种高速、高性能的内存模块,适用于需要高带宽和低延迟的应用场景。与前几代内存模块相比,DDR5双列直插式内存模块具有更高的数据传输速率和更低的功耗,同时提供了更大的内存容量和更高的可靠性。在数据...
点击进入详情页
本回答由东莞市友贸实业有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询