主机操作系统是 Windows 10,具有 16BG RAM。我有 Oracle VirtualBox,Ubuntu 18.04 作为客户操作系统(2GB RAM)。
我在客户操作系统上运行了以下程序。我可以看到最高列出 40GB。但是,我没有看到 VirtualBox 的 RAM 使用量超过 230MB。
我如何才能看到客户机和主机上准确的内存计数器?
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <malloc.h>
static size_t total = 0, n = 0;
static char* ptrs[20000] = {0};
static size_t ncur = 0;
static void alloc_more(int more)
{
char* tmp = (char*)malloc(more);
tmp[more/2] = 32;
tmp[more-1] = 41;
tmp[0] = 53;
total += more;
printf("\n allocated total is %lu GB for %p", total/(1024*1024*1024),tmp);
ptrs[++n] = tmp;
ncur = (n*3)/4;
if(ptrs[ncur])
{ memset((void*)ptrs[ncur], 33, more);
}
}
int main(int argc, char* argv[])
{
while(1)
{
alloc_more(atoi(argv[1]));
}
return 0;
}
答案1
当您分配内存时,它只是被保留。您需要在实际使用之前将某些东西放入其中。如果您在其中放入了某些东西,那么您应该会观察到 VM RAM 使用率增加。您可能希望在程序中设置一些休眠来减慢速度,以便有时间观察程序的进展情况。
有一个关于使用所有可用内存的有趣问题就在前几天。