Gnome资源监视器报告的C ++程序中的内存使用情况:混淆

一团

我正在查看应用程序消耗的内存,以确保我分配的内存不会过多,并且对于Gnome资源监视器向我显示的内容感到困惑。我使用以下代码在两个单独的应用程序中分配了内存,这些应用程序在其他方面是相同的;它们只包含以下代码和scanf()调用,以暂停执行,同时获取内存使用情况:

malloc(1024 * 1024 * 100);

char* p = new char[1204*1024*100];

下图显示了我在每行之前和之后的应用程序的内存使用情况:

内存使用

现在,我已经阅读了很多(但显然不够)有关内存使用情况(包括这个SO问题)的信息,并且在区分可写内存和虚拟内存时遇到了麻烦。根据链接的问题,

“可写内存是您的进程使用写特权分配的地址空间量”

“虚拟内存是您的应用程序已分配的地址空间”

1)如果我自己分配了内存,那么它肯定具有写权限吗?

2)链接的问题也说明了(关于malloc)

“ ...实际上并不会分配任何内存。(有关详细信息,请参阅malloc(3)页面末尾的rant。)”

我没有看到任何“咆哮”了,我的图片显示了虚拟内存已经增加了!有人可以解释一下吗?

3)如果我完全是以下代码:

char* p = new char[100];

...资源监视器显示内存和可写内存都增加了8KB,这与我分配完整的1兆字节时一样!-虚拟内存增加了0.1。这是怎么回事?

4)我应该在资源监视器中查看哪一列,以查看我的应用程序正在使用多少内存?

在此先非常感谢您的参与,如果不清楚或遗漏任何可能导致我自己寻找答案的内容,我们深表歉意。

特瓦尔贝格

Gnome资源监视器报告的内存类别(实际上,绝大多数资源报告工具)不是简单的内存类别-它们之间存在重叠,因为它们报告的是内存的不同特征。这些不同的特征包括:

  • 虚拟与物理-现代操作系统上进程地址空间中的所有内存都是虚拟的;虚拟地址空间通过CPU的硬件功能映射到实际的物理内存;如何完成映射本身就是一个复杂的主题,不同架构之间存在很多差异
  • 内存访问权限-内存可以是可读,可写或可执行的,也可以是这三种的任意组合(理论上-某些组合实际上没有任何意义,因此实际上可能不被硬件和/或软件所允许,但是重点是这些权限分开处理)
  • 驻留或非驻留-对于虚拟内存系统,由于多种原因,进程的许多地址空间当前可能实际上尚未映射到实际物理内存-可能尚未分配;它可能是二进制文件的一部分,也可能是库之一,甚至可能是由于程序尚未调用而尚未加载的数据段;它可能已换出到交换区域,以释放物理内存以供需要它的其他程序使用
  • 共享vs私有-进程虚拟地址空间的只读部分(例如,程序的实际代码和大多数库)可能与使用相同库或程序的其他进程共享-这是一个很大的过程总体内存使用量的优势,因为xterm运行37个不同的实例并不意味着xterm需要将其代码加载37次不同的时间到内存中-所有进程都可以共享该代码的一个副本

由于这些因素以及其他一些因素(IPC共享内存,内存映射文件,在硬件中映射了内存区域的物理设备等),决定了任何单个进程甚至整个系统正在使用的实际内存,可能很复杂。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Linux中监视程序的内存使用情况

Android Studio中的内存监视器报告的RAM使用情况与设备不同

系统监视器中内存使用情况下的缓存使用情况

系统监视器和顶部报告的内存使用情况截然不同

C#Winforms应用程序中的总进程内存使用情况的矛盾报告

监视CPU和内存使用情况的程序

如何获得任务管理器中显示的应用程序内存使用情况?

System Monitor中的内存使用情况报告与免费的内存使用情况报告有什么区别?

如何监视内存使用情况?

C#中动态类型的内存使用情况

C中当前进程的内存使用情况

C中的多维数组内存使用情况(堆)

“ free”命令显示的内存使用情况与系统监视器的使用情况不匹配

列出R Shiny服务器上应用程序中对象的内存使用情况

在系统监视器中监视每个进程的网络使用情况

通过Java应用程序监视自己的内存使用情况

监视应用程序内存使用情况的正确方法是什么?

使用 C++ DLL 的 C# 应用程序的内存使用情况

如何使用性能监视器查找Taskmanager中显示的cpu使用情况

在Linux上的C ++程序中分析常驻内存使用情况和许多页面错误

监视JVM的非堆内存使用情况

如何监视Java内存使用情况?

如何监视单个进程的CPU /内存使用情况?

如何监视Node.js的内存使用情况?

监视Java内部对象和内存使用情况

C#中的EventLog枚举器的内存使用情况

Lambda无法报告正确的内存使用情况

如何在OSX中监视从终端运行的进程的内存使用情况

监视Windows版AWS CloudWatch实例中的内存使用情况