我正在研究示例流程的内存使用情况。首先我分配一些内存,检查虚拟内存和驻留内存的大小(在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)?
答案 0 :(得分:2)
Linux如何知道进程使用了多少物理内存(VmRSS)?
当进程尝试访问尚未映射到物理内存的虚拟内存时,CPU(假设它具有硬件内存管理单元)将触发由操作系统处理的中断(特别是页面错误) 。操作系统将物理内存分配给进程并更新转换后备缓冲区(MMU的一部分,用于将虚拟内存映射到物理上)。
因此,由于它是分配物理内存的操作系统,它还可以跟踪它为每个进程分配的数量。