C++ 有限的分配大小C++;
我使用VisualStudio2008。 我已动态声明变量big_massible: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以
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用于临时数据。如果您的数据需要写入磁盘,为什么不首先使用磁盘空间呢。您甚至可以使用内存映射文件(您可以选择文件的一部分,并且可以像访问内存一样访问它)。您可能还喜欢数据库管理系统的(简单或不简单)替代方案