【博客126】( 二 ) 使用libgc库来帮你管理内存
内容: 上一篇讲述了如何使用libgc帮你检测内存泄露,那么其实还可以使用libgc帮你管理内存,用它的接口分配的内存,当你一直泄露后其实是有被回收的
使用:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <gc/gc.h>
void test()
{char *s = GC_MALLOC(102400);*s = 0x10;
}
int main(void)
{for (int i = 0; i < 10000; i++) {printf("%d, heap=%d\n", i, GC_get_heap_size());test();sleep(1);}getchar();return 0;
}
结果:
$ gcc -o test -g test.c -lgc
$ ./test
0, heap=0
1, heap=192512
2, heap=360448
3, heap=585728
4, heap=585728
5, heap=585728
6, heap=585728
7, heap=585728
...
...
可以看到泄露一定程度后内存开始被回收,维持稳定,不再继续泄露了。
在对已有的项目进行接口替换时,其实不需要太麻烦,准备好以下宏定义就好啦
#define malloc(n) GC_MALLOC(n);
#define free(n) GC_FREE(n);
其实还可以采用静态库的方式使用,打包的时候就方便一点:
gcc -o test -g test.c /usr/lib/libgc.a -lpthread
最后注意下:
libgc 只对 GC_MALLOC 等⽅法分配的内存空间有效!!!
对了,再提醒以下,我的程序命令为test,在你的目录下很容易冲突的,编译会报错:
/usr/bin/ld: cannot open output file test: Is a directory
collect2: ld returned 1 exit status原因:
生成的目标文件test的所在目录有一个名叫test的目录。
解决方法:
这时候不要慌张哈哈,这个错误可能平时并不多见,只需要改一下名字不跟已存在的文件冲突就好。
【博客126】( 二 ) 使用libgc库来帮你管理内存相关推荐
- 利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二)
系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...
- 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置
前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...
- Django 系列博客(二)
Django 系列博客(二) 前言 今天博客的内容为使用 Django 完成第一个 Django 页面,并进行一些简单页面的搭建和转跳. 命令行搭建 Django 项目 创建纯净虚拟环境 在上一篇博客 ...
- Spring boot实训开发个人博客(二)详情页
Spring boot实训开发个人博客(二)详情页 1.在index页面添加归档: 2.开始写详情页: 1.头部文件: 2.添加文章内容 <h2 class="ui center al ...
- 如何将微信素材库的文章保留格式的复制到自己的博客论坛或者其他素材库
如何将微信素材库的文章保留格式的复制到自己的博客论坛或者其他素材库 在这里我以秀米编辑器为例: 1.首先先进入自己微信后台以后,Ctrl+C复制自己所有的内容. 2.进入秀米编辑器,新建一个图文,在右 ...
- SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)
系列文章目录 系统功能演示--基于SpringBoot和Vue的后台管理系统项目系列博客(一) Vue2安装并集成ElementUI--基于SpringBoot和Vue的后台管理系统项目系列博客(二) ...
- 网站框架搭建——基于Django框架的天天生鲜电商网站项目系列博客(二)
系列文章目录 需求分析--基于Django框架的天天生鲜电商网站项目系列博客(一) 网站框架搭建--基于Django框架的天天生鲜电商网站项目系列博客(二) 用户注册模块--基于Django框架的天天 ...
- RecBole小白入门系列博客(二) ——General类模型运行流程
RecBole小白入门系列博客(二) --General类模型运行流程 写在前面 选定模型 设置模型超参数 选定数据集 数据集基本格式 设置数据集参数 设置训练参数 设置评测参数 总结参数设置 运行 ...
- python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...
原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...
最新文章
- debian php mysql 包_Linux+Varnish+Apache+MySQL+PHP一键包For Ubuntu/Debian
- 通往奥格瑞玛的道路(洛谷 1462)
- win7怎么桌面能不能设置html,win7系统怎么格式化
- mysql导入sql文件
- spark-1.6.0-cdh5.15.1环境搭建:Local模式和StandAlone
- linux将mysql导出表数据导入另一台服务器_远程linux服务器mysql数据库导入和导出.sql文件...
- asf linux教程,ASF V3.0 windows/linux含树莓派部署流程
- MySql主从数据同步的执行过程
- 计算机网络中流的定义,计算机网络的基本概念-Read.PPT
- 【版本控制】Github for Windows客户端的使用
- 【C/C++】sizeof(结构体)的计算
- 二叉树 java泛型_java二叉树
- 多元线性模型的分位数回归
- Linux查看网口丢包命令,Linux模拟网络丢包与延迟的方法
- SECURITY 03: 邮件服务TLS/SSL 、 总结和答疑 、 CA数字证书服务
- html书写表单laber,HTML基础
- gamemaker学习笔记:拖拽
- 6-2 使用函数输出指定范围内Fibonacci数的个数 (20 分)
- Android Studio不使用数据线调试adb
- 隐写术-----黑与白(二)