众所周知,C语言的 malloc 函数可以申请一段内存空间,并且只有在 free 后才会释放。那么利用这个原理,我们可以循环 malloc 直至返回值为 NULL ,从而得到当前的最大可用内存。
[C] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
int main() {
long long int bytes = 0;
void *p = 1;
while (p != NULL) {
printf("%lld Bytes...\r", bytes);
p = malloc(1);
bytes++;
}
printf("%lld Bytes RAM available.\n", bytes);}
如果只是每次申请1Byte,那么测试的效率肯定低下。我们可以一次申请2^20B的内存,如果返回了NULL,则申请2^19B的内存...如此循环,则可极大地提高测试效率。
[C] 纯文本查看 复制代码 #include <stdio.h>
#include <stdlib.h>
int main() {
long long int bytes = 0;
unsigned int payload = 1048576;
void *p;
while (1) {
printf("%lld Bytes...\r", bytes);
p = malloc(payload);
if (p == NULL) {
if (payload != 1) {
payload >>= 1;
} else {
break;
}
} else {
bytes += payload;
}
}
printf("%lld Bytes RAM available.\n", bytes);
}
当然,变量本身也会占内存,所以为了精确,必须再加上变量所占用的内存。
[C] 纯文本查看 复制代码 bytes += sizeof(p) + sizeof(payload) + sizeof(bytes);
实机运行,一秒不到就得到了结果
|