使用new申请了100亿大小的内存空间,但是只有14亿多的能访问。

问题遇到的现象和发生背景

使用new申请了100亿大小的内存空间,但是只有14亿多的能访问。

问题相关代码,请勿粘贴截图
int main()
{
    const size_t n = 10000000000;
    int* a = new int[n];
    a[0] = 10;
    a[6000000000] = 10;

    return 0;
}

运行结果及报错内容

编译会有警告 索引“6000000000”超出了“0”至“1410065407”的有效范围(对于非堆栈缓冲区“a”)。
运行报错 引发了异常: 写入访问权限冲突。

程序能分到的内存是有限的
你开的太大了超出了内存限制,所以直接报错了应该是

100亿大小的内存空间,嗯。。。。就是10G的内存,你内存有这么大么?

c语言是32位的程序,它只支持int类型的寻址范围,也就是最大1410065407
超过了会无法寻址

编译器在语言的语法上面有限制,操作系统在内存申请上也有限制,双重保险。
为什么会是这么个奇怪数字,那就不知道了

运行截图

img