当前位置:  技术问答>linux和unix

关于redhat Linux ,g++下stl库map内存释放的问题

    来源: 互联网  发布时间:2016-03-02

    本文导语:  My   program   uses   the   C++   STL   and   string   classes.   Valgrind   reports   'still   reachable'   memory   leaks   involving   these   classes   at   the   exit   of   the   program,   but   there ...

My   program   uses   the   C++   STL   and   string   classes.   Valgrind   reports   'still   reachable'   memory   leaks   involving   these   classes   at   the   exit   of   the   program,   but   there   should   be   none.  
  First   of   all:   relax,   it's   probably   not   a   bug,   but   a   feature.   Many   implementations   of   the   C++   standard   libraries   use   their   own   memory   pool   allocators.   Memory   for   quite   a   number   of   destructed   objects   is   not   immediately   freed   and   given   back   to   the   OS,   but   kept   in   the   pool(s)   for   later   re-use.   The   fact   that   the   pools   are   not   freed   at   the   exit()   of   the   program   cause   Valgrind   to   report   this   memory   as   still   reachable.   The   behaviour   not   to   free   pools   at   the   exit()   could   be   called   a   bug   of   the   library   though.

Using   gcc,   you   can   force   the   STL   to   use   malloc   and   to   free   memory   as   soon   as   possible   by   globally   disabling   memory   caching.   Beware!   Doing   so   will   probably   slow   down   your   program,   sometimes   drastically.

With   gcc   2.91,   2.95,   3.0   and   3.1,   compile   all   source   using   the   STL   with   -D__USE_MALLOC.   Beware!   This   is   removed   from   gcc   starting   with   version   3.3.

With   gcc   3.2.2   and   later,   you   should   export   the   environment   variable   GLIBCPP_FORCE_NEW   before   running   your   program.

With   gcc   3.4   and   later,   that   variable   has   changed   name   to   GLIBCXX_FORCE_NEW.

There   are   other   ways   to   disable   memory   pooling:   using   the   malloc_alloc   template   with   your   objects   (not   portable,   but   should   work   for   gcc)   or   even   writing   your   own   memory   allocators.   But   all   this   goes   beyond   the   scope   of   this   FAQ.   Start   by   reading   http://gcc.gnu.org/onlinedocs/libstdc++/ext/howto.html#3   if   you   absolutely   want   to   do   that.   But   beware:

there   are   currently   changes   underway   for   gcc   which   are   not   totally   reflected   in   the   docs   right   now   ("now"   ==   26   Apr   03)

allocators   belong   to   the   more   messy   parts   of   the   STL   and   people   went   to   great   lengths   to   make   it   portable   across   platforms.   Chances   are   good   that   your   solution   will   work   on   your   platform,   but   not   on   others.
 
为什么定义了GLIBCXX_FORCE_NEW这个环境变量后使用stl还是会存在内存泄露?那位大虾也碰到过这个问题并解决了的还请多多指教。

|
首先帮你排了一下版。关于Valgrind的'still reachable',可以参考我回答的另一个问题,也许不是问题:
http://topic.csdn.net/u/20080104/10/7ed09e99-a2c0-489b-8fd8-9c222b4d11eb.html

My program uses the C++ STL and string classes. Valgrind reports 'still reachable' memory leaks involving these classes at the exit of the program, but there should be none.
 First of all: relax, it's probably not a bug, but a feature. Many implementations of the C++ standard libraries use their own memory pool allocators. Memory for quite a number of destructed objects is not immediately freed and given back to the OS, but kept in the pool(s) for later re-use. The fact that the pools are not freed at the exit() of the program cause Valgrind to report this memory as still reachable. The behaviour not to free pools at the exit() could be called a bug of the library though.

 Using gcc, you can force the STL to use malloc and to free memory as soon as possible by globally disabling memory caching. Beware! Doing so will probably slow down your program, sometimes drastically.

 With gcc 2.91, 2.95, 3.0 and 3.1, compile all source using the STL with -D__USE_MALLOC. Beware! This is removed from gcc starting with version 3.3.

 With gcc 3.2.2 and later, you should export the environment variable GLIBCPP_FORCE_NEW before running your program.

 With gcc 3.4 and later, that variable has changed name to GLIBCXX_FORCE_NEW.

 There are other ways to disable memory pooling: using the malloc_alloc template with your objects (not portable, but should work for gcc) or even writing your own memory allocators. But all this goes beyond the scope of this FAQ. Start by reading http://gcc.gnu.org/onlinedocs/libstdc++/ext/howto.html#3 if you absolutely want to do that. But beware:

 there are currently changes underway for gcc which are not totally reflected in the docs right now ("now" == 26 Apr 03)

 allocators belong to the more messy parts of the STL and people went to great lengths to make it portable across platforms. Chances are good that your solution will work on your platform, but not on others.

|
好像是与realloc有关系
实在想不起来了
那篇文章找不到了

    
 
 

您可能感兴趣的文章:

  • redhat9内存使用率高达73%,怎么查看内存具体使用情况
  • 我的机器内存128 ,安装redhat9 后,可用内存很少了,如何节省内存呢?
  • redhat7.1 p4,700多m内存,经常耗了400m内存,为什么?
  • 网络技术 iis7站长之家
  • 请教redhat9上如何进行内存整理
  • redhat as5.4 内存4G 只能认到3G
  • RedHat 7.2支持Criyx 200 Pro吗?48M EDO内存够用吗?
  • RedHat9.0中如何查到CPU/内存的型号?
  • 请教 redhat清理内存的问题
  • 有谁知道redhat linux服务器可以给tomcat保留部分内存不被其他进程使用吗?
  • redhat7下内存问题(128m只能识别64m)
  • Redhat AS 4 系统运行了一段时间后,发现用了很多内存, 应该如何分析问题呢?
  • 新手上路:请问Redhat 7.3的swap分区要多大啊?我的内存是256
  • redhat 8.0一个进程会占用多少内存阿
  • Redhat 9.0下面查看某个进程占用内存的命令是什么,知道的告诉一下啊。
  • 10G硬盘、64M内存、已装Slakware8.0,再装Redhat7.2如何做? 内详
  • RedHat as 4 带有 12G 内存, swap 应该开多大才算合理呢?
  • 请问老奔腾200、64M内存的机器可以安装REDHAT LINUX8.0吗?
  • 请教一下redhat9刚刚开机时就用了200多M内存, 怎样设置开机时起动的程序
  • 告诉大家一个经验,RedHat Linux 8.0必须装在内存大于64MB的机器上,否则安装会出错的,这是个安装BUG
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 关于通过FTP安装REDHAT7。2的问题。(网络安装REDHAT7。2问题)
  • 三个问题,关于RedHat7.2和RedHat7.3的........
  • [RedHat9]RedHat9无法进入图形模式,疑是声卡问题,请教如何解决?
  • redhat8.0的安装问题?那里有redhat8.0的安装指南!
  • 有关Redhat Linux的版本问题
  • 超级菜鸟的~~不好意思问题~~REDHAT9的视频播放问题~!
  • 关于安装REDHAT9的几个问题,谢谢解答
  • ■请教■请教redhat最基本的问题!
  • redhat下关于在本机与板子连接的问题
  • RedHat8.0安装问题请教?
  • 请教两个redhat9问题
  • 安装redhat后winxp不能启动问题.(菜鸟的菜问题)
  • 硬盘安装ISO文件的REDHAT6.2问题
  • 请教redhat8.0中的两个问题~奇怪啊~
  • win2000 跟 redhat8.1 安装问题
  • win2K 下安装redhat 7.2的问题
  • redhat9.0安装问题
  • RedHat8安装问题
  • 高手进 !!!redhat linux 9 问题
  • 关于REDHAT 9.0的问题.初学者,请大家不要见笑.
  • redhat/centos 常用信息查看命令整理
  • 请问redhat6.2或redhat7.0有没有汉化版本或汉化包。only redhat serial?
  • Linux/centos/redhat下各种压缩解压缩方式详解
  • 我机器上装了win98SE,win2000 Server,和Mandrake linux,我想再装个RedHat,可是到后来我发现RedHat没有认出ManDrake,我装上RedHat后,Lilo
  • Linux_centos_redhat下tar命令解压tgz文件方法
  • 不是说Liunx是免费发布的嘛,请问哪里可以下载RedHat 7.3或更高版本的redhat的完全安装版,请提供地址,我想装个redhat学学
  • redhat linux/CentOS 6/7 关闭防火墙(iptables)命令,作用:CentOS 防火墙不关行不行?
  • REDHAT8 比 REDHAT7.x要好多少? 是不是对硬件要求比较高? 另外
  • 根据文件大小查找文件的find命令举例(Linux,centos,redhat)
  • redhat13.8与redhat9有什么驱别?
  • 红帽redhat下通过脚本和yum安装docker容器引擎的详细步骤


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3