我想在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
?