如何在c ++中分配2 GB的内存?

时间:2010-07-14 20:02:00

标签: visual-c++

我试图分配的内存不是很大或任何东西。我只是不能分配 1.5至1.7千兆字节的传染性记忆。据我所知,Windows为您提供了2 GB的虚拟空间供您在应用程序中使用。所以,像malloc(1500 * 1024 * 1024)这样的调用并不是完全疯狂的。我试过malloc,new [],VirtualAlloc都没用。

这里有什么我想念的吗? 有人告诉我它与物理内存有关,我完全不认为是因为如果我分配物理内存,为什么会发明虚拟空间,地址转换表和TLB。

如果我在一台拥有256兆字节RAM的机器上分配1.5演出,我试图访问不应该是系统颠簸而是工作?

4 个答案:

答案 0 :(得分:3)

不同版本的Windows有different memory restrictions。如果您使用的是32位版本,则可能需要使用4GB tuning techniques来分配超过2GB的内容。

答案 1 :(得分:2)

答案 2 :(得分:1)

如果您运行的是32位版本的Windows,则最多有2Gb的虚拟空间。您编译的程序和C / C ++运行时库都会使用它的一部分,以及预先分配的代码和数据段。如果运行32位窗口,则内存空间比您想象的要少。我同意1.5 Gb听起来不合理,但是你会认为MS产品也不合理,对吗?

尝试使用suleller作为健全性检查(例如,1Gb);我怀疑会成功。并尝试在64位系统上进行大量分配,其中没有任何实际上限。

答案 3 :(得分:0)

您使用的是ODBC吗? 32位窗口中的ODBC dll似乎将自己插入虚拟地址空间中的一个尴尬的位置,导致像你这样的大型分配失败。解决方法是将应用程序配置为延迟加载ODBC dll,然后确保在调用使用ODBC的任何内容之前分配大块。