C malloc:无法解释的内存使用情况

dha*_*0us 2 c malloc

当我编译并运行以下代码时:(在cygwin上使用gcc)

int *a = malloc(1024*1024*100*sizeof(int));
while(1)
;
Run Code Online (Sandbox Code Playgroud)

Windows XP中的任务管理器将此进程的内存使用量显示为2232K,根据我的说法应该大约为400000K.

当我编译并运行以下代码时:(在cygwin上使用gcc)

int *a = malloc(1024*1024*400*sizeof(int));
while(1)
;
Run Code Online (Sandbox Code Playgroud)

内存使用量降至1388K;

因此,它实际上显示出下降,而不是显示出增长.

有什么可以解释这个?

Mic*_*and 7

您已经分配了内存,使其可用,但尚未使用它(从/向它读取或写入).内存管理器可能还没有实际为你的程序分配物理内存,只是说你可以拥有它.如果你在刚分配的内存中写一些内容(例如用0填充它 - 看看memset),我希望内存使用量更符合你的预期.

  • Overcommit只是告诉内核发出的内存超过它实际可以保证的内存.无论是否过度使用,内存在实际使用时仍会出现故障. (3认同)