21xrx.com
2025-04-26 12:55:58 Saturday
文章检索 我的文章 写文章
如何在C++中查看内存占用情况?
2023-06-24 03:54:55 深夜i     62     0
C++ 内存占用 查看

在 C++ 编程中,了解程序的内存占用情况是非常重要的。了解内存占用情况可以帮助你更好地优化程序,防止出现内存泄漏等问题。在本文中,我们将介绍如何在 C++ 中查看程序的内存占用情况。

1.使用内置函数

在 C++ 中,你可以使用内置函数获取程序的内存占用情况。其中最常用的函数是 getrusage 函数,它位于头文件 中。这个函数可以获取程序所使用的内存量、进程使用的 CPU 时间、文件 I/O 等相关信息。

这是一个简单的示例代码,演示了如何在 C++ 中使用 getrusage 函数来获取进程的内存占用情况:

#include <sys/resource.h>
#include <iostream>
using namespace std;
int main()
{
  struct rusage usage;
  getrusage(RUSAGE_SELF, &usage);
  printf("Memory usage: %ld\n", usage.ru_maxrss);
  return 0;
}

2.使用第三方库

除了使用内置函数之外,你还可以使用第三方库来查看内存占用情况。其中,比较常用的是 valgrind 工具。valgrind 同时还能检查内存泄漏等问题。

要使用 valgrind,你需要安装它,然后运行你的程序时添加 --leak-check=full 参数。这会在程序结束后输出内存泄漏的详细信息。

以下是一个示例程序,演示了如何在 C++ 中使用 valgrind 来检查内存泄漏:

#include <cstdlib>
int main()
{
  int *p = (int*)malloc(sizeof(int) * 10);
  p[0] = 10;
  return 0;
}

编译并运行程序之前,需要先安装 valgrind。在 Linux 中,你可以使用以下命令来安装:

sudo apt-get install valgrind

然后,你可以使用以下命令来运行程序:

valgrind --leak-check=full ./a.out

在程序结束运行之后,你将会看到类似以下信息:

==31367== Memcheck, a memory error detector
==31367== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==31367== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==31367== Command: ./a.out
==31367==
==31367==
==31367== HEAP SUMMARY:
==31367==   in use at exit: 40 bytes in 1 blocks
==31367==  total heap usage: 1 allocs, 0 frees, 40 bytes allocated
==31367==
==31367== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==31367==  at 0x4C2A14B: malloc (vg_replace_malloc.c:299)
==31367==  by 0x4005F9: main (main.cpp:4)
==31367==
==31367== LEAK SUMMARY:
==31367==  definitely lost: 40 bytes in 1 blocks
==31367==  indirectly lost: 0 bytes in 0 blocks
==31367==   possibly lost: 0 bytes in 0 blocks
==31367==  still reachable: 0 bytes in 0 blocks
==31367==     suppressed: 0 bytes in 0 blocks
==31367==
==31367== For counts of detected and suppressed errors, rerun with: -v
==31367== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

可以看到,valgrind 检测到内存泄漏,同时输出了泄漏的详细信息。

总结

了解程序内存占用情况是 C++ 程序开发过程中的一个重要的环节。本文介绍了两种查看内存占用情况的方法。如果你想获取更多的内存使用信息,可以使用其他的第三方工具。但是,使用以上两种方法已经足以应对大多数情况。

  
  

评论区