文档章节

替换malloc的方法

chunquedong
 chunquedong
发布于 2014/05/31 11:19
字数 249
阅读 685
收藏 6

替换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

chunquedong

粉丝 45
博文 131
码字总数 36559
作品 4
海淀
高级程序员
加载中

评论(1)

二的思维
二的思维
很厉害的样子
linux 下 C 编程和make的方法 (九、malloc 和 free的功能补充)

我们回顾一下,前面的目标,如下: 1、可通过宏的方式,打开或关闭检测,当关闭时检测代码全部在编译时被拿掉。 2、检测的打开,尽可能的少的影响代码本身的运行效率。检测代码的是否工作和编...

中山野鬼
2012/04/14
1K
0
【腾讯Bugly干货分享】聊聊苹果的Bug - iOS 10 nano_free Crash

本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/hnwj24xqrtOhcjEt_TaQ9w 作者:张三华 导语 精神哥最近发现, 很多开发者在 iO...

腾讯Bugly
2016/12/12
368
0
C++笔记——malloc基本用法

int *p; p = (int)malloc(sizeof(int) 128); //分配128个(可根据实际需要替换该数值)整型存储单元,malloc申请的是虚拟内存,并不是物理内存 //并将这128个连续的整型存储单元的首地址存储...

yushupan
2017/12/18
0
0
第9篇 #define的使用与代码运行检测方法 (中)

鬼话:说测试,怎么说到一个宏的设计上来了,测试方法,讲究方法,我们将代码可以看作和存储有关,和逻辑有关,和存储及逻辑均有关三种。除了最后一个有点难办,第二个,仅和逻辑有关,存在不...

中山野鬼
2012/11/29
2.1K
9
ACE内存映射技术

内存映射文件 多个操作系统平台都提供了内存映射文件,这是一个简单的将数据结构保存到文件中的机制。同时由于32位操作系统的进程虚拟内存最大只能4GB,用内存映射文件的方式就可以突破这个限...

长平狐
2012/08/28
306
0

没有更多内容

加载失败,请刷新页面

加载更多

play framework 如何支持多数据源

有段时间没有写博客了,但今天又写一篇了,主要是因为这事有一丝自己的思考和动手实践,所以就记录下来了。 现有的问题: play 1.2.4 两台数据库服务器,但是play1.2.4 并不支持同时连接两台...

tuerqidi
15分钟前
0
0
Mysql only_full_group_by解析

查看当前数据库模式: select @@sql_mode; 原因: mysql 5.7中的sql_mode的值中包含'ONLY_FULL_GROUP_BY'; 处理:执行以下SQL set GLOBAL sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,N......

年轻的中年大叔
17分钟前
0
0
防止表单重复提交

1:前端方式(治标不治本) $("#admin-role-save").click(function(){//admin-role-save为submit的idvar ts=$(this);var ts_old_val=ts.val();ts.val("提交中....");ts.att...

uug
17分钟前
0
0
保持屏幕常亮

getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 在act的created方法中调用即可,一般是播放视频的时候......

Carbenson
17分钟前
0
0
智能合约实施指南

与区块链技术一样,智能合约在商业领域也非常有价值。 为了让我们的读者彻底了解智能合约是什么以及它们如何影响现代商业的交易方式,我们准备了本指南。 集中商业模式正在给去中心化的模式让...

geek12345
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部