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

时间:2017-09-26 10:28:14

标签: c++ new-operator heap-memory

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

  

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

我的简化代码是:

int main(){
    char* myBuffer = new char[11000000000];
    //char* myBuffer = new char[4000000000]; //compiled successfully
}

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

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

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

使用new运算符时,我的代码有什么问题?

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

修改 n.m。提供的链接无法完全回答我的问题。我还想知道malloc为什么效果不错,而不是new

0 个答案:

没有答案