ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

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

2019-11-21 06:02:12  阅读:247  来源: 互联网

标签:gnome memory-management linux c-4


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

malloc(1024 * 1024 * 100);

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

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

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

“Writeable memory is the amount of address space that your process has
allocated with write privileges”

“Virtual memory is the address space that your application has
allocated”

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

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

“…which won’t actually allocate any memory. (See the rant at the end
of the malloc(3) page for details.)”

我没有看到任何“骚动”,并且我的图像显示虚拟内存增加了!有人可以解释一下吗?

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

char* p = new char[100];

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

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

非常感谢您的参与,如果不清楚或错过任何可能导致我自己寻找答案的内容,我们深表歉意.

解决方法:

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

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

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

标签:gnome,memory-management,linux,c-4
来源: https://codeday.me/bug/20191121/2049589.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有