libumem使用和源码分析系列文章(二)
2014-02-01 11:50
411 查看
在使用libumem时,大家可能都有一点好奇,为什么系统会使用libumem封装的malloc,free这些内存管理函数去替换libc中的内存管理函数?其实答案就在malloc.c中的如下代码:
针对上述代码,我们只需关注#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。
#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; #else void __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。
相关文章推荐
- 在Windows平台下使用安装GCC(图)
- Linux C函数参考手册(PDF版)
- 安装软件 Nullsoft Install System 2.27汉化版 下载
- C#实现打造气泡屏幕保护效果
- C/C++数据对齐详细解析
- C 语言基础教程(我的C之旅开始了)[三]
- C 语言基础教程(我的C之旅开始了)[七]
- C/C++ 宏详细解析
- Could not load type System.ServiceModel.Activation.HttpModule解决办法
- PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
- 用C#生成不重复的随机数的代码
- linux使用gcc编译c语言共享库步骤
- oracle忘记sys/system/scott用户密码的解决方法
- 在c和c++中实现函数回调
- 浅析C/C++中被人误解的SIZEOF
- C 语言基础教程(我的C之旅开始了)[六]
- Oracle中sys和system的区别小结
- System Repair Engineer (SREng) 功能介绍与下载
- Office 2007 System 常见问题集第1/3页