免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: jhzhu_snps
打印 上一主题 下一主题

Solaris 平台上怎么在系统malloc free时加入自己的代码? [复制链接]

论坛徽章:
0
21 [报告]
发表于 2010-03-16 18:09 |只看该作者
回复 20# irp

如果自己写一个malloc那么代码会是这样的
malloc(size)
{
    check_code_before_malloc();
    ret = MALLOC(size);
    check_code_after_malloc();
    return ret;
}

这里的问题是MALLOC该用什么函数能够实现内存分配的功能?glibc里面有一些类似_malloc的函数是不会调用malloc的,但是solaris的函数库里就目前我能找到的mallo类函数最后都会调用malloc. 如果我用LD_PRELOAD直接替换掉malloc只怕这些函数调用的也都会是我写的这个malloc,这样就形成了一个无穷递归,这个怎么用barrier解决啊?

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-23 06:20:00
22 [报告]
发表于 2010-03-16 18:39 |只看该作者
本帖最后由 irp 于 2010-03-16 19:42 编辑

简单的方式是

malloc(size)
{
    if (tls->pending) {
        ret = call func ptr of malloc()
        return ret;
   }

    tls->pending = true;

    check_code_before_malloc();

    ret = call func ptr of malloc();

    check_code_after_malloc();
   
    tls->pending = false;

    return ret;
}

each thread has 1 tls block

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-09-23 06:20:00
23 [报告]
发表于 2010-03-16 19:38 |只看该作者
>> 这里的问题是MALLOC该用什么函数能够实现内存分配的功能?
对 标准malloc的调用要以函数指针的方式绕过linker.
这儿有个例子
http://developers.sun.com/solari ... .html#malloc_hist.c

另外你的before/after函数也可能引起malloc,直接或者间接的,这个要通过barrier。

论坛徽章:
0
24 [报告]
发表于 2010-03-16 20:46 |只看该作者
用洪,debug版本的时候,用宏把malloc,free等函数替换成你自己的实现,,release的时候,就用系统那一讨。

论坛徽章:
0
25 [报告]
发表于 2010-03-16 20:56 |只看该作者
>> 这里的问题是MALLOC该用什么函数能够实现内存分配的功能?
对 标准malloc的调用要以函数指针的方式绕过 ...
irp 发表于 2010-03-16 19:38



    这个例子好。我还在想怎么拿到malloc的地址,没想到用dlopen。

论坛徽章:
0
26 [报告]
发表于 2010-03-17 18:43 |只看该作者
>> 这里的问题是MALLOC该用什么函数能够实现内存分配的功能?
对 标准malloc的调用要以函数指针的方式绕过 ...
irp 发表于 2010-03-16 19:38



    太牛了,应该管用了,回头我试试看。

论坛徽章:
0
27 [报告]
发表于 2010-03-17 19:31 |只看该作者
直接mmap应该能解决递归问题吧

论坛徽章:
0
28 [报告]
发表于 2010-03-17 19:34 |只看该作者
直接mmap应该能解决递归问题吧
flw2 发表于 2010-03-17 19:31


mmap能解决malloc但是realloc和free都会有问题,而且在一个很大的系统里还真不敢随便改这么底层的东西。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP