繁体   English   中英

Linux如何知道进程使用了​​多少物理内存?

[英]How does Linux know how much physical memory is used by a process?

我正在调查示例进程的内存使用情况。 首先我分配一些内存,检查虚拟内存和驻留内存的大小(在RAM中)。 然后我将数据写入分配的内存并再次检查这些值。

int main()
{
 int pid = getpid();
 std::stringstream s;
 s << "cat /proc/" << pid << "/status | grep \"VmSize\\|VmRSS\"";
 std::string command = s.str();
 std::cout << "Before allocation\n";
 system(command.c_str());
 char* mem = new char[10000000];
 std::cout << "After allocation\n";
 system(command.c_str());
 memset(mem, 0, 10000000);
 std::cout << "After writing\n";
 system(command.c_str());
 return 0; 
}

输出:

Before allocation
VmSize:     3412 kB
VmRSS:       852 kB
After allocation
VmSize:    13180 kB
VmRSS:       852 kB
After writing
VmSize:    13180 kB
VmRSS:     10568 kB

当操作员new分配内存时,只有VmSize的值发生变化。 当数据写入内存时,VmRSS的值会发生变化。 Linux如何知道进程使用了​​多少物理内存(VmRSS)?

Linux如何知道进程使用了​​多少物理内存(VmRSS)?

当进程尝试访问尚未映射到物理内存的虚拟内存时,CPU(假设它具有硬件内存管理单元)将触发由操作系统处理的中断(特别是页面错误)。 操作系统将物理内存分配给进程并更新转换后备缓冲区(MMU的一部分,用于将虚拟内存映射到物理)。

因此,由于操作系统是分配物理内存的,因此它还可以跟踪为每个进程分配的内存量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM