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?