c语言内存统计,打印内存使用信息。自己写。

本文介绍了如何在C语言中实现内存统计,通过编写自定义内存库函数,跟踪内存分配和释放,以帮助开发者更好地理解和管理程序内存。文中给出了头文件中的关键函数定义,并分享了一个简单的内存统计实例,强调了内存统计在各种项目中的实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c语言内存统计,打印内存使用信息。自己写。

1. 为什么需要内存统计

​ 曾经听说过,c语言不会指针的话,等于c语言没有了灵魂,觉得说的很贴切。但是指针就设计到内存,c语言的内存应该是臭名远扬,一没有使用好,就会导致程序崩溃。解决这个问题有很多方法。很多程序的库函数都有写自己的内存池,对。没错,内存池是一个比较好的选择。还有的话,就是今天给你们介绍的,对使用的内存进行统计。网上相关的文档很少,今天给大家分享下,怎么 统计内存。通过自己编写内存统计库函数实现。使用工具也可以统计这边我就不多说了。当前工具统计的更完全,我们写的只有我们自己申请的内存,和释放的内存才可以使用。

​ 优点也是有的,内存统计显而易见,很好的去解决,小在学校的小程序,大到大型的工程项目我们都可以使用到。不费话了, 接下来给大家介绍。

内存统计使用的例子

​ 在介绍内存统计的代码之前,先介绍我编写的一个内存统计的例子,方便后续你们的理解:

  1. 主程序
#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. 程序运行结果
    在这里插入图片描述

内存统计的介绍

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. 需要统计的信息
  • 申请内存的时候
    • 申请内存的文件
    • 申请内存的行号
    • 申请内存的地址信息
    • 申请内存的大小(大小,有需要的可以统计,我这边觉得没有很大的必要)
  • 内存释放的时候
    • 释放内存的地址信息
    • 申请内存的文件 : (非必要信息)
    • 申请内存的行号 : (非必要信息)
    • 我们要做的就
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值