在Windows或Visual Studio中获取大块内存有什么特别之处吗?

Dal*_*pus 4 c visual-studio-2012

这是我正在打电话.

table  = (int *) malloc(sizeof(int) * (C+1) * (N+1));
Run Code Online (Sandbox Code Playgroud)

C+1*N+1 结果是657,562,500

但是这个调用NULL在Windows上执行时返回给我(表示它无法分配该空间量).
(它使用较小的数字可以正常工作,并且在我的Linux机器上使用比这更大的数字也能正常工作)

在此之前,该计划并没有真正做多少.

当我查看任务管理器时,它显示28.1 GB的可用内存.

所以我想知道,我可以在Visual Studio中设置一些像编译器标志或者什么东西来让我像这样抓住大块内存吗?

如果我的数学是正确的,我相信我要求大约1.22GB.

感谢任何帮助

编辑:显然我需要将其作为64位应用程序运行.任何人都知道如何在Visual Studio中将ac项目更改为64位?在平台Win32下的配置参数是唯一的选择.

abe*_*nky 6

您可能已将项目设置设置为构建32位应用程序.

虽然您的计算机可能有大量可用内存,但32位应用程序的使用量不能超过2GB.根据我的估计,4字节x 650M约为2.6 GB.

尝试更改项目设置以构建64位平台.

但仍然问自己为什么要一次分配这么多内存.这很可能表明程序设计存在问题.

  • +1,特别是关于块大小的观点.即使在64位构建中,要求大量的顺序存储器也是有问题的.通常,可用堆是碎片化的,并且总是不可能获得连续内存的长时间运行.最好将许多较小的块链接在一起(想想大约100-200 MB的块)并进行一些索引管理. (2认同)