我刚刚执行了一个程序,该程序在 12 MB 的机器(QEMU Emulated!)中 mallocs 13 MB。不仅如此,我什至浏览了内存并在其中填充了垃圾......
void
large_mem(void)
{
#define LONGMEM 13631488
long long *ptr = (long long *)malloc(LONGMEM);
long long i;
if(!ptr) {
printf("%s(): array allocation of size %lld failed.\n",__func__,LONGMEM);
ASSERT(0);
}
for(i = 0 ; i < LONGMEM ; i++ ) {
*(ptr+i)=i;
}
free(ptr);
}
这怎么可能?我原以为会出现段错误。
最佳答案
它被称为虚拟内存,是为您的程序分配的。这不是您称为 RAM 的真实内存。
虚拟内存也有最大限制,但它高于 RAM。它由您的操作系统实现(和定义)。
关于c++ - Malloc 分配的内存多于 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7504139/