C++获取内存使用情况小结

 更新时间:2024年01月11日 09:53:21   作者:Joemt  
在程序编程过程中,为了防止出现内存泄漏情况出现,需要持续关注内存程序内存占用情况,本文主要介绍了C++获取内存使用情况小结,具有一定的参考价值,感兴趣的可以了解一下

在程序编程过程中,为了防止出现内存泄漏情况出现,需要持续关注内存程序内存占用情况。如下方式实现获取当前进程内存使用情况:

linux:

void my_top(string path, bool flag)
{
    if(flag)
    {
        FILE* read_top = fopen("/proc/self/status", "r");
        char line_rss[128];
        unsigned long long Pid, VmSize, VmRSS;

        while (fgets(line_rss, 128, read_top) != NULL)
        {
            if (strncmp(line_rss, "Pid:", 4) == 0)
            {
                string str(line_rss + 4);
                Pid = strtoull(str.c_str(), NULL, 19);
            }

            if (strncmp(line_rss, "VmSize:", 7) == 0)
            {
                string str(line_rss + 7);
                VmSize = strtoull(str.c_str(), NULL, 19);
            }

            if (strncmp(line_rss, "VmRSS:", 6) == 0)
            {
                string str(line_rss + 6);
                VmRSS = strtoull(str.c_str(), NULL, 19);
            }

            if(Pid < 0 || VmSize < 0 || VmRSS < 0)
            {
                fclose(read_top);
                break;
            }
        }
        fclose(read_top);

        ofstream writer_top(path, ios::app);
        writer_top << Pid << " " << VmSize << " " << VmRSS << endl;
        writer_top.close();
    }
    else
    {
        ofstream writer_top(path, ios::app);
        writer_top << "0" << " " << "0" << " " << "0" << endl;
        writer_top.close();
    }
}

其他资源:

VmPeak:     表示进程所占用最大虚拟内存大小
VmSize:     表示进程当前虚拟内存大小
VmLck:      表示被锁定的内存大小
VmHWM:        表示进程所占用物理内存的峰值
VmRSS:         表示进程当前占用物理内存的大小(与procrank中的RSS)
VmData:     表示进程数据段的大小
VmStk:      表示进程堆栈段的大小
VmExe:      表示进程代码的大小
VmLib:      表示进程所使用共享库的大小
VmPTE:      表示进程页表项的大小

windows:

#include <windows.h>
#include <psapi.h>
#include <stdio.h>

int main()
{
    PROCESS_MEMORY_COUNTERS pmc;
    if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof(pmc)))
    {
        printf("当前进程占用内存大小为:%d KB\n", pmc.WorkingSetSize / 1024);
    }
    return 0;
}

到此这篇关于C++获取内存使用情况小结的文章就介绍到这了,更多相关C++获取内存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 高效实现整型数字转字符串int2str的方法

    高效实现整型数字转字符串int2str的方法

    下面小编就为大家带来一篇高效实现整型数字转字符串int2str的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析

    C++实现图的邻接矩阵存储和广度、深度优先遍历实例分析

    这篇文章主要介绍了C++实现图的邻接矩阵存储和广度、深度优先遍历,实例分析了C++实现图的遍历技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 关于C语言中弱符号与弱引用的实际应用问题

    关于C语言中弱符号与弱引用的实际应用问题

    在编码过程中,我们经常遇到符号重定义的错误问题,本文通过实例代码展示给大家介绍了C语言弱符号与弱引用的实际应用问题,一起看看吧
    2021-09-09
  • 浅谈C++20新增内容

    浅谈C++20新增内容

    C++20 是 C++ 语言的一次重大更新,它引入了许多新特性,本文主要介绍了浅谈C++20新增内容,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • C++ 约瑟夫环的实例代码

    C++ 约瑟夫环的实例代码

    这篇文章主要介绍了C++ 约瑟夫环的实例代码的相关资料,希望通过本文能帮助到大家,实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • C语言数组全面总结梳理

    C语言数组全面总结梳理

    在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活
    2022-02-02
  • 教你5分钟轻松搞定内存字节对齐

    教你5分钟轻松搞定内存字节对齐

    随便google一下,人家就可以跟你解释的,一大堆的道理,我们没怎么多时间,讨论为何要对齐.直入主题,怎么判断内存对齐规则,sizeof的结果怎么来的,请牢记以下3条原则
    2013-09-09
  • C++ LeetCode1780判断数字是否可以表示成三的幂的和

    C++ LeetCode1780判断数字是否可以表示成三的幂的和

    这篇文章主要为大家介绍了C++ LeetCode1780判断数字是否可以表示成三的幂的和题解示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • STL容器之list源码详细解读

    STL容器之list源码详细解读

    这篇文章主要介绍了STL容器之list源码详细解读,相对于vector的连续线性空间,list就显得更加复杂,它每插入或者删除一个元素,就配置或释放一个元素空间,需要的朋友可以参考下
    2024-01-01
  • 关于STL中list容器的一些总结

    关于STL中list容器的一些总结

    list就是数据结构中的双向链表(根据sgi stl源代码),因此它的内存空间是不连续的,通过指针来进行数据的访问,这个特点使得它的随即存取变的非常没有效率,因此它没有提供[]操作符的重载
    2013-09-09

最新评论