Linux下内存检查
STL的一个好处就是省去自己管理内存的麻烦,但是我发现在Windows上用boundChecker检查内存时,总是会跟踪到stl的函数内部。最近在Linux下使用valgrind检查内存泄露又碰到这类问题。
比如:
23,416 bytes in 1 blocks are possibly lost in loss record 23 of 33
at 0x401AFE7: operator new(unsigned int) (vg_replace_malloc.c:214)
by 0x419F830: std::__default_alloc_template<true, 0>::_S_chunk_alloc(unsigned int, int&)
by 0x419F73C: std::__default_alloc_template<true, 0>::_S_refill(unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
by 0x419F2AB: std::__default_alloc_template<true, 0>::allocate(unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
by 0x41A52A7: std::string::_Rep::_S_create(unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.5.0.3)
by 0x41A53D8: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
by 0x41A3145: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.5.0.3)
by 0x41A36EB: std::string::append(unsigned int, char) (in /usr/lib/libstdc++.so.5.0.3)
by 0x41A33DE: std::string::operator+=(char) (in /usr/lib/libstdc++.so.5.0.3)
by 0x407C723: CMyclass::mymethod(std::istream&) (in /home/lzq/lib/libmylib.so)
最终的指向是std::__default_alloc_template<true, 0>::_S_chunk_alloc(unsigned int, int&) 函数当中调用new,最后又没有释放内存。
我不太了解的是这些内存泄露是否是真正的内存泄露。
如果不是内存泄露那么程序退出都没有释放内存,该什么时候释放?