C++ 在c+中使用x64系统和x86应用程序分配大内存+;

C++ 在c+中使用x64系统和x86应用程序分配大内存+;,c++,qt,memory,64-bit,mingw32,C++,Qt,Memory,64 Bit,Mingw32,我有一个问题,无法找到解决方案(因为缺乏知识) 问题是,我的应用程序(用c++编写,用mingwx86使用Qt5.3.2)分配内存块,总的来说,这些内存块应该能容纳7.5到8.5 GB(我已经用calc预先计算过了)。每个块是1MB 应用程序在一个周期内分配内存,一次迭代分配1 MB内存。 我只有8 GB的内存,但当我使用显示器查看它何时停止分配时,我发现这并不取决于启动应用程序时容纳了多少内存 当应用程序分配4 GB时,它总是停止分配,这并不取决于系统中仍然有2 GB可用空间(在开始之前,我几

我有一个问题,无法找到解决方案(因为缺乏知识)

问题是,我的应用程序(用
c++
编写,用
mingw
x86使用
Qt
5.3.2)分配内存块,总的来说,这些内存块应该能容纳7.5到8.5 GB(我已经用calc预先计算过了)。每个块是1MB

应用程序在一个周期内分配内存,一次迭代分配1 MB内存。
我只有8 GB的内存,但当我使用显示器查看它何时停止分配时,我发现这并不取决于启动应用程序时容纳了多少内存

当应用程序分配4 GB时,它总是停止分配,这并不取决于系统中仍然有2 GB可用空间(在开始之前,我几乎有6 GB可用空间,8 GB可用空间)或者没有

所以我不明白为什么会这样,但我认为这是因为应用程序的x86结构

但我也需要在x86系统上使用该应用程序(我知道不可能有超过4GB的x86系统)

我怎样才能解决这个问题

我更喜欢保存应用程序x86结构并允许其分配超过4GB的方式。

但是如果没有这样的解决方案,我会使用应用程序的x64结构。

应用程序在4GB后停止填充内存的原因是因为它使用了32位指针。对于32位,您只能表示
2^32
,或4294967296字节的内存。从物理上讲,你无法填满更多的空间

更具体地说,您的程序也可以从操作系统中获得最大4GB的页面,因此使用2个32位指针将没有帮助


不幸的是,这意味着您必须切换到64位,这将允许寻址更多的内存位置。

只需为64位和32位系统构建不同版本的应用程序即可。32位应用程序不能使用超过4G的内存。可能重复:它不是重复的。OP想要分配超过4GB的内存,这在上是不可能的x86@Googie很抱歉,我查看了链接,
标志已被删除。然而,这个链接是关于Linux的,这是针对Windows的。虽然这和2进程方法一样需要大量的工作,但还是有令人敬畏的地方。正如第一条评论所说,我会而且已经做了很长一段时间。我的意思是构建独立的64位和32位应用程序,尽管现在32位编译并不频繁。另一种解决方案是(如中所建议的)更改应用程序设计,使用多个相互通信的进程,它们可以一起使用更多内存。这更难,但如果切换到64位不是一个选项,那么这是我能想到的唯一其他方法。是的,我考虑过,但这似乎比简单地在64位模式下编译要麻烦得多。非常感谢。我想我会尝试在x64中重新编译,但是多进程应用程序的想法也很有趣。