分配大小有限的C ++

时间:2011-12-10 09:45:59

标签: c++ dynamic allocation

我使用的是Visual Studio 2008。 我动态地声明了变量big_massive:

unsigned int *big_massive = new unsigned int[1073741824]

但是,当我尝试调试此程序时,出现以下错误:无效的分配大小:4294967295字节。 我希望有任何途径可以避免这种错误吗?谢谢!

3 个答案:

答案 0 :(得分:6)

在具有sizeof(int)==4的32位x86系统上无法进行分配(您要求4GB)。进程的总地址空间限制为4GB,进程本身通常限制为小于(32位Windows为2GB或3GB,具体取决于boot.ini设置和Windows版本,不确定哪个限制适用于32位进程64位Windows,但4GB是不可能的。)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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