替换malloc的方法
替换malloc的方法
chunquedong 发表于4年前
替换malloc的方法
  • 发表于 4年前
  • 阅读 567
  • 收藏 6
  • 点赞 0
  • 评论 1

【腾讯云】买域名送云解析+SSL证书+建站!>>>   

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

替换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
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
chunquedong
粉丝 45
博文 120
码字总数 35332
作品 4
评论 (1)
二的思维
很厉害的样子
×
chunquedong
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: