为什么我分配的内存不能超过RAM中的可用空间?

时间:2019-10-23 06:27:53

标签: c malloc virtual-memory

我试图执行一个malloc语句,如下所示:

TYPODATO *prof=(TYPODATO *)malloc((size_t)H*V*B2*sizeof(TYPODATO));

H*V*B2*sizeof(TYPODATO)等于13037160840 B = 13.04 GB。如果我在控制台中执行命令free -m以获取可用内存(以MB为单位),则会得到13486 MB = 13.486 GB。

但是,前面的malloc语句返回NULL指针,指示无法分配这样的内存量。请求的内存量不及系统中可用的内存量,但是即使我应该能够成功分配它,也会导致系统可以使用虚拟内存。为什么在这种情况下系统不使用虚拟内存?

1 个答案:

答案 0 :(得分:4)

malloc()不能这样工作。 malloc()分配一个连续的内存块
您正在尝试分配比连续可用更多的内存,因此会出现错误。