为什么我不能分配比 RAM 中可用的内存更多的内存?

Why cannot I allocate more memory than the available in RAM?

我正在尝试执行如下所示的 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语句returns一个NULL指针,说明不能分配这么大的内存。请求的内存量没有系统可用的那么多,但即使是我也应该能够成功分配它,因为系统可以使用虚拟内存。为什么在这种情况下系统没有使用虚拟内存?

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