在堆上分配大约10GB的内存

Gnt*_*ntS 5 c++ heap-memory new-operator

我想在RAM上分配大约10 GB.但我得到错误:

错误C2148:数组的总大小不得超过0x7fffffff

我的简化代码是:

int main(){
    char* myBuffer = new char[11000000000];
    //char* myBuffer = new char[4000000000]; //compiled successfully
}
Run Code Online (Sandbox Code Playgroud)

我知道x86和x64之间的差异以及x86中的寻址大小限制.所以我将目标设置为x64.我也知道堆栈大小限制,但请注意我在堆上分配.

令人惊讶的是,当我使用下面的代码并成功编译时.

#include <memory>
int main(){
    char* myBuffer = (char*) malloc(11000000000); //compiled successfully even much more than this size
}
Run Code Online (Sandbox Code Playgroud)

我使用new运算符时代码出了什么问题?

环境: Visual Studio 2013使用空项目,Windows server 2008 R2 Datacenter,128 GB RAM.

编辑:nm提供的链接不能完全回答我的问题.我也想知道为什么malloc效果不错但不是new