我正在查看应用程序消耗的内存,以确保我分配的内存不会过多,并且对于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资源监视器报告的内存类别(实际上,绝大多数资源报告工具)不是简单的内存类别-它们之间存在重叠,因为它们报告的是内存的不同特征。这些不同的特征包括:
xterm
运行37个不同的实例并不意味着xterm
需要将其代码加载37次不同的时间到内存中-所有进程都可以共享该代码的一个副本由于这些因素以及其他一些因素(IPC共享内存,内存映射文件,在硬件中映射了内存区域的物理设备等),决定了任何单个进程甚至整个系统正在使用的实际内存,可能很复杂。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句