malloc内存申请大小问题(C初学者)

学了malloc试着看看电脑能申请的最大内存。

    int *a;
    int b = 0;
    while (a = (int*)malloc(1024 * 1024 * 10))
    {
        b++;
    }
    printf("%d0MB", b);
    free(a);

x64运行结果:

img

img

x86运行结果:

img

然后多了很多疑惑。
首先为什么x86和x64不同环境下,能申请的最大内存差距这么悬殊?
然后,为什么x64下申请的最大内存可以超过我电脑的最大内存(16G)?是代码问题吗?
最后,为什么申请的最大内存会变动,是跟电脑的工作状态有关吗(闲or忙)?但为什么这个变动并不是特别大?

x86时32为地址寻址,最大的内存大约是4g左右,64为的就大多了。
内存的申请是像系统申请,当然的就会受到系统使用情况的影响。
内存能申请超过硬件内存的大小是因为存在虚拟内存。这样才能够保证这么多的进程都能够共存,不然早就爆了。