首页

文章

如何在linux操作系统下检测内存泄漏

发布网友 发布时间:2022-04-19 13:36

我来回答

2个回答

热心网友 时间:2022-05-20 22:39

内存泄漏是指程序动态申请的内存在使用完后没有释放,导致这段内存不能被操作系统回收再利用。
例如这段程序,申请了4个字节的空间但没有释放,有4个字节的内存泄漏。

#include <iostream>using namespace std;int main()
{     int *p = new int(1);     cout <<*p<<endl;     return 0}

随着时间的推移,*存越来越多,可用的内存越来越少,轻则性能受损,重则系统崩溃。

一般情况下,发生内存泄漏时,重启就可以回收*存。但是对于Linux,通常跑的是服务器程序,不可以随意重启,在内存泄漏问题上就要格外小心。

内存泄漏特点

难复现 — 要运行到足够长的时间才会暴露。

难定位 — 出错位置是随机的,看不出与内存泄漏的代码有什么联系。

最简单的方法

为了避免写出内存泄漏的程序,通常会有这样的编程规范,要求我们在写程序时申请和释放成对出现的。因为每一次申请都意味着必须有一次释放与它相对应。

基于这个特点,一种简单的方法就是在代码中统计申请和释放的次数,如果申请和释放的数量不同,就认为是内存泄漏了。

#include "stdio.h"#include "stdlib.h"int malloc_count, free_count;void * my_malloc(int size)
{
    malloc_count++;     return malloc(size);
}void my_free(void *p)
{
    free_count++;     free(p);
}int main()
{
    count = 0;     int *p1 = (int *)my_malloc(sizeif(int))     int *p2 = (int *)my_malloc(sizeif(int))     printf("%d, %d", p1, p2);
    my_free(p1);     if(malloc_count != free_count)         printf("memory leak!\n");     return 0}方法分析

直观,容易理解,容易实现

1.该方法要求运行结束时对运行中产生的打印分析才能知道结果。

2.该方法要求封装所有申请和释放空间的函数,并在调用的地方修改成调用封装后的函数。虽然C中申请/释放内存接口并不多,但是对于一个大型的项目,调用这些接口的地方却是很多的,要全部替换是一个比较大的工作量。

3.只对C语言适用,不能应用于C++

4.对于所调用的库不适用。如果希望应用于库,则要修改库代码

5.只能检测是否泄漏,却没有具体信息,比如泄漏了多少空间

6.不能说明是哪一行代码引起了泄漏

改进

这种方法虽然简单的,却有许多的不足,无法真正应用于项目中。欲知怎样改进,且看下回分解。

热心网友 时间:2022-05-20 22:39

Do business,but be not a slave to it.
李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 怎么样来检查Linux系统下内存泄漏 linux怎么查看内存使用情况 Linux服务器要怎么查看内存? Linux系统下如何查看物理内存占用 如何用linux命令查询内存使用情况 怎样用linux命令来查看内存使用情况 linux可以查看内存使用的命令 如何手动释放Linux内存的方法 如何查看linux系统中空闲内存/物理内存使用/剩余内存 如何查看linux闲置和占用的内存 怎么查看linux 删除 未释放空间 linux如何查看还有多少内存 linux查看剩余内存的命令 文件中转站过期了怎么续期? 腾讯QQ邮件里文件中转站有效时间? Qq邮箱的文件中转站是干什么的,提醒我说文件到期了, QQ邮箱中转站为什么中转不了? 为什么我QQ邮箱文件中转站突然找不到了 文件中转站过期了怎么恢复? QQ文件中转站不能续期了,怎么办? linux下查看内存的命令 怎么查看linux内存使用情况 linux环境下如何查看内存 电脑底部的菜单栏怎么一直在?玩游戏的时候不能全... 为什么玩穿越火线时不能全屏,老有一个任务栏留着? 英雄联盟不能全屏显示任务栏怎么办 为什么win10玩游戏不能全屏 全屏玩游戏的时候,系统任务栏总是弹出来,全屏游... 怎么解决游戏不能全屏的问题啊 吃鸡进游戏或者开始后都显示下面的任务栏。怎么让... windows10的笔记本玩游戏不能全屏怎么办? 问一下各位大神,我玩欧卡为什么不能全屏,而且任... 玩游戏不能全屏了,开始栏 状态栏都显示 怎么解决... 游戏画面被任务栏挡住了,郁闷啊,坑爹的仙剑又不... 英雄联盟游戏时出现不能全屏,任务栏总是在下边,... 跑跑卡丁车程序运行,但屏幕无法全屏,停留在任务... 我家电脑怎么一玩全屏游戏任务栏就到下面去了拉不上来 为什么打游戏窗口化全屏,任务栏要显示 怎么让win10的任务栏全屏玩游戏的时候自动隐藏,桌... win10任务栏在全屏游戏中没法隐藏,不知道怎么办,...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com