替换malloc的方法

替换malloc和new是为了检查内存泄漏和溢出。虽然有valgrind但是并不好用。

1.封装malloc、重写new

C语言可以用宏替换malloc,例如: #define malloc cf_malloc 或者就在IDE里面手动查找替换一下。

但是C++就比较麻烦,重写全局new带来很多问题。目前我是只重写基类的new和delete。

2.GCC malloc hooks

http://www.gnu.org/savannah-checkouts/gnu/libc/manual/html_node/Hooks-for-Malloc.html

此方法无法支持多线程,deprecated

3.GCC wrap

ld中有一个选项 –wrap,当查找某个符号时,它优先先解析__wrap_symbol, 解析不到才去解析symbol。

好像对C++的new不起作用。

4.POSIX dlsym

系统的dlsym函数链接
void* malloc(size_t size)
{
    static void* (*real_malloc)(size_t) = NULL;
    if (!real_malloc)
	real_malloc = dlsym(RTLD_NEXT, "malloc");

    void *p = real_malloc(size);
    fprintf(stderr, "malloc(%d) = %p\n", size, p);
    return p;
}

5.Linux LD_PRELOAD

环境变量,mac DYLD_INSERT_LIBRARIES

LD_PRELOAD=mymalloc.so ./exe

转载于:https://my.oschina.net/chunquedong/blog/271248

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值