如何在c中找到内存分配的最大限制

Aza*_*Ali 5 c malloc memory-management dynamic-memory-allocation

我想确定我可以在计算机中分配的最大内存限制是多少.这是我为此任务编写的代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int j;
    int *primes;
    int i ;

    int limit = 2147483647;

    primes = malloc(sizeof(int) * limit);
    for (i = 0; i < limit; i++)
    {
        primes[i] = 1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何在没有命中和试用的情况下确定可以分配多少内存?我在这个例子中分配了最大的int大小.但程序崩溃了.在这个例子中真正分配了多少内存?

YeP*_*IcK 8

malloc()允许失败,在这种情况下,它返回一个NULL指针而不分配任何内存.它总是一个全有或全无的分配.它要么成功并分配所请求大小的完整内存块,要么失败,返回NULL指针而不分配单个字节.

至于知道有多少内存可用 - 这实际上取决于环境:你在运行它的操作系统是16位,32位,64位内存架构?

例如,如果您在Windows 10上运行,则可以使用该GlobalMemoryStatusEx()工具(有关详细信息,请参阅MSDN:GlobalMemoryStatusEx()).

Linux,OTOH,提供了一种简单的sysconf()方法来检索类似的信息.有关更多详细信息,请参阅此页面.

即使您的操作系统是64位,也不一定意味着您的应用程序可以访问超过一定限制.例如,即使完整的虚拟内存空间为16TB,Windows 7 64位也只允许您在应用程序代码中寻址高达8GB的内存.