我想编写一个程序,每秒分配一些内存块,然后写出剩余的内存量(我故意不释放任何内存,因为这是模拟内存不足的实际用例).下面是(针对Linux的)程序:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
size_t mbs = 500 * 1000000; // 500mb
while(true) {
sleep(1);
void* tmp = malloc(mbs);
system("free");
}
return 0;
}
对free
的系统调用列出了可用内存,我预计可用内存每秒会减少500MB,但从下面的前几行输出中可以看到,可用内存没有显著变化(在大约32 GB的RAM中,可用内存徘徊在25 GB左右).我也try 了较低的容量,10MB和free
MB,但行为是相同的.
因此,在这个特定的输出中,到第8个空闲时间,我预计已经使用了8 GB的RAM:
user@DESKTOP-DAGF175:/Projects/tmp$ g++ main.cpp
user@DESKTOP-DAGF175:/Projects/tmp$ ./a.out
total used free shared buff/cache available
Mem: 33471660 7338384 25903924 17720 229352 25999544
Swap: 8192000 0 8192000
total used free shared buff/cache available
Mem: 33471660 7330684 25911624 17720 229352 26007244
Swap: 8192000 0 8192000
total used free shared buff/cache available
Mem: 33471660 7327256 25915052 17720 229352 26010672
Swap: 8192000 0 8192000
total used free shared buff/cache available
Mem: 33471660 7325428 25916880 17720 229352 26012500
Swap: 8192000 0 8192000
total used free shared buff/cache available
Mem: 33471660 7325208 25917100 17720 229352 26012720
Swap: 8192000 0 8192000
total used free shared buff/cache available
Mem: 33471660 7321232 25921076 17720 229352 26016696
Swap: 8192000 0 8192000
total used free shared buff/cache available
Mem: 33471660 7321360 25920948 17720 229352 26016568
Swap: 8192000 0 8192000
total used free shared buff/cache available
Mem: 33471660 7318624 25923684 17720 229352 26019304
Swap: 8192000 0 8192000
我也在Windows上try 了类似的东西,但结果是一样的.以下也是Windows代码:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
size_t mbs = 500 * 1000000; // 500mb
while(true) {
Sleep(2);
void* tmp = malloc(mbs);
system("systeminfo |find \"Available Physical Memory\"");
}
return 0;
}
为什么我没有看到消耗的内存有所减少?