原帖由 zzbwang 于 2006-2-21 10:30 发表
以前在LINUX下用过ValGrind,感觉不错,在BSD上有没有类似的软件啊。
我在程序中释放了内存,用top命令看到的程序使用的内存一直不下降,是不是top命令统计的有问题?
多谢!
boehm-gc-6.6_2
Garbage collection and memory leak detection for C and C++
Long description | Package | Sources | Main Web Site
Maintained by: nobutaka@FreeBSD.org
Requires: libtool-1.3.5_2
ccmalloc-0.4.0_1
C/C++ memory profiler and memory leak tracer
Long description | Package | Sources | Main Web Site
Maintained by: ports@FreeBSD.org
Requires: expat-2.0.0, gettext-0.14.5_1, gmake-3.80_2, libiconv-1.9.2_1
leaktracer-2.4
Trace and analyze memory leaks in C++ programs
Long description | Package | Sources | Main Web Site
Maintained by: danfe@FreeBSD.org
Requires: expat-2.0.0, gettext-0.14.5_1, gmake-3.80_2, libiconv-1.9.2_1
原帖由 zzbwang 于 2006-2-21 10:30 发表
我在程序中释放了内存,用top命令看到的程序使用的内存一直不下降,是不是top命令统计的有问题?
原帖由 LHA 于 2006-2-22 09:17 发表
我也发现这个问题 不太明白为什么
top(1) also defaults to showing you the amount of memory space taken by the process. This is split into two columns, one for total size, and one for resident size--total size is how much memory the application has needed, and the resident size is how much it is actually using at the moment.
原帖由 assiss 于 2006-3-6 13:06 发表
由于标准库以及其它一些函数库(比如GTK)的实现问题,malloc分配的内存被free之后,进程并不一定会立即还给系统,而是维护一个内存池,以便下次快速分配。
这是我在别的地方看到的。标准库的实现代码还没有看 ...
尽管“可见度”不高,brk()也许是最常使用的系统调用了,用户进程通过它向内核申请空间。人们常常并不意识到在调用brk(),原因在于很少有人会直接使用系统调用brk()向系统申请空间,而总是通过像malloc()一类的c语言库函数(或语言成分,如c++中的new)间接地用到brk()。如果把malloc()想象成零售,brk()则是批发。库函数malloc()为用户进程(malloc本身就是该进程地一部分)维持一个小仓库,当进程需要使用更多的内存空间时就像小仓库要,小仓库中存量不足时就通过brk()向内核批发。
原帖由 gvim 于 2006-3-8 11:20 发表
top不是讨论OS是否归还mem的问题吧?
原帖由 angeljyt 于 2007-4-21 09:12 发表
这其中可能有粒度的问题吧.总不可能哪么实时.如果释放1k,系统就回收1k.内存回收操作太频繁还不是影响性能.
我是个菜鸟.管孔之见
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) | Powered by Discuz! X3.2 |