Visual c++ vc++;64位程序在消耗数GB内存时在新运算符上崩溃

Visual c++ vc++;64位程序在消耗数GB内存时在新运算符上崩溃,visual-c++,crash,64-bit,new-operator,Visual C++,Crash,64 Bit,New Operator,我写了一个64位的程序,它消耗了大量的内存。当它消耗数GB内存时,会导致新运算符出错。但事实上,这台机器上还有几GB的可用内存可供使用。其他程序运行正常,内存比这个程序多得多。我已经启用了编译选项/Zm2000和链接选项/LargeAddressware。 那么原因是什么呢?即使您还有几GB的空闲空间,您也必须记住内存可能会变得支离破碎。如果没有可用的连续块来满足您的请求,则分配将失败并出现异常。让新运算符导致“崩溃”或“错误”的唯一方法是用代码损坏堆。C++程序中一种非常常见的故障模式。否则,

我写了一个64位的程序,它消耗了大量的内存。当它消耗数GB内存时,会导致新运算符出错。但事实上,这台机器上还有几GB的可用内存可供使用。其他程序运行正常,内存比这个程序多得多。我已经启用了编译选项/Zm2000和链接选项/LargeAddressware。
那么原因是什么呢?

即使您还有几GB的空闲空间,您也必须记住内存可能会变得支离破碎。如果没有可用的连续块来满足您的请求,则分配将失败并出现异常。

让新运算符导致“崩溃”或“错误”的唯一方法是用代码损坏堆。C++程序中一种非常常见的故障模式。否则,让我们精确猜测您看到的内容没有什么意义。试着运行Viva64代码。我发现很难相信一个16 EB(2^64)的虚拟地址空间会变得如此支离破碎,以至于您无法找到几GB范围的虚拟地址。@librik是的,但并不是所有范围都可用。您仍然受到物理RAM和交换空间数量的限制。