文章目录
c语言内存统计,打印内存使用信息。自己写。
1. 为什么需要内存统计
曾经听说过,c语言不会指针的话,等于c语言没有了灵魂,觉得说的很贴切。但是指针就设计到内存,c语言的内存应该是臭名远扬,一没有使用好,就会导致程序崩溃。解决这个问题有很多方法。很多程序的库函数都有写自己的内存池,对。没错,内存池是一个比较好的选择。还有的话,就是今天给你们介绍的,对使用的内存进行统计。网上相关的文档很少,今天给大家分享下,怎么 统计内存。通过自己编写内存统计库函数实现。使用工具也可以统计这边我就不多说了。当前工具统计的更完全,我们写的只有我们自己申请的内存,和释放的内存才可以使用。
优点也是有的,内存统计显而易见,很好的去解决,小在学校的小程序,大到大型的工程项目我们都可以使用到。不费话了, 接下来给大家介绍。
内存统计使用的例子
在介绍内存统计的代码之前,先介绍我编写的一个内存统计的例子,方便后续你们的理解:
- 主程序
#include <memory_count.h>
int main(void)
{
int i = 0;
char *p = NULL;
memory_count_init();
p = m_malloc(11);
p = m_malloc(11);
m_free(p);
for (i =0; i < 5; i++) {
p = m_malloc(222);
}
mem_info_printf();
system("pause");
memory_count_exit();
}
- 程序运行结果
内存统计的介绍
1. 通过自己编写内存统计库函数,先贴头文件的函数。
//memory_count.h
#ifndef __MEMORY_COUNT_H__
#define __MEMORY_COUNT_H__
#include <stdio.h>
#include <stdlib.h>
/**
* 内存统计接口
*/
#define m_malloc(size) m_perform_malloc(size, __FILE__, __LINE__)
#define m_calloc(size) m_perform_calloc(size, __FILE__, __LINE__)
#define m_free(ptr) m_perform_free(ptr, __FILE__, __LINE__)
void m_perform_free(char *ptr, const char *filep, int line);
char* m_perform_calloc(size_t size, const char *filep, int line);
char* m_perform_malloc(size_t size, const char *filep, int line);
void mem_info_printf(void);
void memory_count_init(void);
void memory_count_exit(void);
#endif
这个是自己编写的最基础版本,因为能力有限,很多地方都不全。先简单介绍
#define m_malloc(size) m_perform_malloc(size, __FILE__, __LINE__)
#define m_calloc(size) m_perform_calloc(size, __FILE__, __LINE__)
#define m_free(ptr) m_perform_free(ptr, __FILE__, __LINE__)
这边的宏定义,也就是我们所要使用内存统计的接口,以后申请内存都是调用自己写的宏定义接口,因为调用的时候有默认提供给我们的信息有,FILE, LINE。也就是申请内存的文件名称和行号,方便我们查看内存的使用以及内存的统计信息。
2. 内存统计的.c文件分析
1. 需要统计的信息
- 申请内存的时候
- 申请内存的文件
- 申请内存的行号
- 申请内存的地址信息
- 申请内存的大小(大小,有需要的可以统计,我这边觉得没有很大的必要)
- 内存释放的时候
- 释放内存的地址信息
- 申请内存的文件 : (非必要信息)
- 申请内存的行号 : (非必要信息)
- 我们要做的就