libumem使用和源码分析系列文章(二)
来源:互联网 发布:js获取div内容 编辑:程序博客网 时间:2024/05/22 04:48
在使用libumem时,大家可能都有一点好奇,为什么系统会使用libumem封装的malloc,free这些内存管理函数去替换libc中的内存管理函数?其实答案就在malloc.c中的如下代码:
#ifdef __GLIBC__static void __attribute__((constructor)) umem_malloc_init_hook(void){if (__malloc_hook != umem_malloc_hook) {umem_startup(NULL, 0, 0, NULL, NULL);__malloc_hook = umem_malloc_hook;__free_hook = umem_free_hook;__realloc_hook = umem_realloc_hook;__memalign_hook = umem_memalign_hook;}}void (*__malloc_initialize_hook)(void) = umem_malloc_init_hook;#elsevoid __attribute__((constructor))__malloc_umem_init (void){umem_startup(NULL, 0, 0, NULL, NULL);}#endif
针对上述代码,我们只需关注#ifdef __GLIBC__......#else这个部分,因为替换libc中的内存管理函数的魔法就在这个部分:
(1)__attribute__((constructor))
__attribute__是gcc的关键字,它允许用户声明一些属性。而constructor属性的含义则是被修饰的函数要在main()函数执行前执行。相对应地,还有一个destructor属性,则是在main()函数结束时执行。这对这个属性的讨论,大家可以参考stackoverflow上的一篇帖子。
(2)__malloc_hook,__free_hook,__realloc_hook,__memalign_hook
这些其实是GNU C库提供的一些变量,程序通过修改这些变量,可以达到使用自己定义的malloc,free这些函数的目的。详细的解释可以参考:http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html。
0 0
- libumem使用和源码分析系列文章(二)
- libumem使用和源码分析系列文章(一)
- 使用libumem定位memory leak和memory corruption(4)
- BroadcastReceiver源码分析系列(二):发送和接收广播
- netty源码分析系列文章
- android源码分析系列(二):propertyAnimation和NineOldAndroids源码分析
- android WifiDisplay 源码分析系列 (二)
- DbUtils源码分析系列(二)
- 车道检测源码分析系列(二)
- 使用libumem定位memory leak和memory corruption(1)
- 使用libumem定位memory leak和memory corruption(2)
- 使用libumem定位memory leak和memory corruption(3)
- 使用libumem定位memory leak和memory corruption(3)-续
- spring系列文章(一)AOP源码分析
- qemu源码分析系列(二)
- bootstrap源码分析系列:二,栅格和响应式布局
- 自荐Android源码分析系列文章
- 自荐Android源码分析系列文章
- leetcode JAVA Combinations 难度系数3 3.26
- leetcode JAVA Subsets 难度系数3 3.27
- leetcode JAVA Word Search 难度系数3 3.28
- #pragma指令用法汇总和解析
- leetcode JAVA Remove Duplicates from Sorted List II 难度系数3 3.29
- libumem使用和源码分析系列文章(二)
- poj 1809 Regetni(数学)
- HP ENVY 4-1227tx Sleekbook 装机技巧
- 冷暖交替,2014年编程兴衰趋势预测
- OGNL & ValueStack 入门
- Leetcode: Word Ladder
- RMI使用手记
- FFmpeg and x264 Encoding Guide
- H.264 Profile、Level、Encoder三张简图