Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有限的分配大小C++;_C++_Dynamic_Allocation - Fatal编程技术网

C++ 有限的分配大小C++;

C++ 有限的分配大小C++;,c++,dynamic,allocation,C++,Dynamic,Allocation,我使用VisualStudio2008。 我已动态声明变量big_massible: unsigned int *big_massive = new unsigned int[1073741824] 但是,当我试图调试这个程序时,我得到了以下错误:无效的分配大小:4294967295字节。 我希望有什么方法可以避免这种错误?谢谢大家! 在sizeof(int)=4的32位x86系统上(您请求的是4GB),这种分配是不可能的。一个进程的总地址空间被限制在4GB以内,而进程本身通常被限制在4GB以

我使用VisualStudio2008。 我已动态声明变量big_massible:

unsigned int *big_massive = new unsigned int[1073741824]
但是,当我试图调试这个程序时,我得到了以下错误:无效的分配大小:4294967295字节。
我希望有什么方法可以避免这种错误?谢谢大家!

在sizeof(int)=4的32位x86系统上(您请求的是4GB),这种分配是不可能的。一个进程的总地址空间被限制在4GB以内,而进程本身通常被限制在4GB以下(根据
boot.ini
设置和Windows版本,32位窗口为2GB或3GB,不确定64位窗口上的32位进程适用哪个限制,但4GB根本不可能)


对于64位的情况,您需要有4GB的虚拟内存来支持该分配才能成功。

32位Windows系统或运行32位程序(WoW64)的64位Windows系统上每个进程的虚拟内存量:2147483648 保存1073741824个4字节无符号整数数组所需的内存量:4294967296 无法容纳可用的内存量,因此分配无效。

  • 32位系统每个进程访问的内存不能超过4GB。但是,在支持延迟分配和过度使用的操作系统上分配3GB内存是可以的,即使您只使用前10kB,并且您的最大交换+内存仍然是1GB。但请记住,依赖这一点首先是愚蠢的
  • 在尝试使用这么多内存之前,请检查是否无法以更紧凑的形式表示数据。如果您的数组有洞,或者值重复,或者您没有使用int的完整32位范围,或者您不需要这些值具有特定的顺序,那么就不要使用数组
  • 请记住,RAM用于临时数据。如果您的数据需要写入磁盘,为什么不首先使用磁盘空间呢。您甚至可以使用内存映射文件(您可以选择文件的一部分,并且可以像访问内存一样访问它)。您可能还喜欢数据库管理系统的(简单或不简单)替代方案

32位Visual Studio项目。但是在64位项目中,我在Test.EXE 0x000 000 FEFD7CACD中未处理异常:微软C++异常:STD::BADYOLL在内存位置0x02EF8B8……P.S.我的OS - Windows 7 X64 A 32位系统不能分配这么多内存,这将占用系统可用的所有内存。