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

有关标准库的内存分配,质疑解决方案

2012-02-26 
有关标准库的内存分配,质疑 最近我的同事遇见了这些问题,说是使用标准库(map及vector)的话,程序占用内存非

有关标准库的内存分配,质疑

最近我的同事遇见了这些问题,说是使用标准库(map及vector)的话,程序占用内存非常大,自己不得不使用自己写的平衡树代替,使用以后,程序使用的内存减少到原来的20%~30%,由于他的经历和经验,我相信他所说的话,但由于不太清楚细节,不太明白c++标准库的alloctor运作原理,这个东西一直搞不明白,有没有这方面有经验的朋友来解释下,或者来指出这其中的关键因素?

BTW:程序运行时占用内存一般在10G以上


[解决办法]
看STL源码剖析,有专门一章讲了这个问题。
正确的答案是:你应该自己实现alloctor。
[解决办法]
不太明白c++标准库的alloctor运作原理,这个东西一直搞不明白,有没有这方面有经验的朋友来解释下,或者来指出这其中的关键因素?
-------------------------------------------------
建议楼主看看《STL源码剖析》,里面有讲到“分配器”的内容,看完之后楼主可以掌握如何自己写分配器来和STL“合作”。然后,楼主可以看看一些典型的内存管理算法(比如,看看malloc的实现代码,或者看看《Modern C++ Design》其中对内存管理也有介绍),这样楼主就可以知道如何高效管理内存。最后,楼主将自己定义的高效内存管理算法“融入”allocator,就可以了。
[解决办法]
另外,也可能是使用不当。
stl中关于内存方面的一些值得注意的事项:
容器的元素可以考虑用指针或者智能指针来代替大的对象。
用swap技巧来修正容器空间等。
[解决办法]
再次回来up一下^_^
[解决办法]
哦,等于说是自己实现高性能cache啊。
这个是得特别考虑,毕竟STL不是针对这种应用场合而专门设计的。

而且不同平台编译器上STL的实现也可能不同,如果不是自己特别设计,而是直接用STL默认的话,则假如你们移植一次平台,或者哪怕换一个编译器,就可能招来性能损失。(当然,也可能招来性能提升,呵呵)
[解决办法]
内存占用量只是考察程序性能的一个标准,令一个是速度。
要看侧重点,比如内存对你来说是主要的,那就优化内存分配。
如果速度是重点,就不要在乎那些内存。

另一方面,根据我的经验,使用个人写的算法,内存分配策略从综合
性能上来看很难超过STL,但是可以从冒方面有些超越。

只要确保对STL有足够的了解和认识,可以说基于STL下的优化更具优势。

win32下的应用程序,最高管理内存量是4G,其中系统还有占去2G空间,
也就是用户空间只有2G,我不清楚楼主的一个应用程序怎么占据10G空间

[解决办法]
to lbaby(是爷们就别装B):
就算要加速,也不必把所有数据都加载到内存吧,只要索引一下就可以了.过度使用内存,会减低系统性能,抵销优化的成果.
用索引加数据缓冲,在速度上,通常可以达到或接近把数据全部加载到内存的性能.而内存占用只有它的零头.
而且数据大到一定程度,系统的内存分配函数就会变得很慢..你必须优化分配策略,选择合适的分配器.

热点排行