《linux中内存泄漏的检测(一)最简单的方法》介绍了最简单的内存泄漏检测方法,这种方法虽然简单,却有很多现实的问题,导致它不能用于实际的生产中。
直接使用这种方法肯定是不现实的,因为:
(1)把整个工程里所有调用malloc/free的地方都改成my_malloc/my_free,代码改动很大。
(2)通常动态库和静态库的代码是没有权限修改的。
今天就来解决这个问题,动态地决定让程序使用自己的还是系统的内存管理接口。
wrap选项
不希望修改产品代码,那么用于申请/释放内存的接口还是malloc/free。
又想在接口中增加计数的功能,就要再实现一套用于申请/释放内存的接口。新接口不能和malloc/free重名。这太矛盾了。
如果能自己定制一个malloc/free就好了。
幸好GCC也想到了这一点,给我们提供了wrap选项。
这是man ld得到的说明:
–wrap=symbol
Use a wrapper function for symbol. Any undefined reference to symbol will be resolved to
__wrap_symbol
. Any undefined reference to__real_symbol
will be resolved to symbol.This can be used to provide a wrapper for a system function. The wrapper function sh