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

时间:2014-11-12 12:39:21

标签: c++ qt memory 64-bit mingw32

我遇到了问题而无法找到解决方案(因为缺乏知识)。

问题是我的应用程序(使用c++ mingw编译的x86使用Qt 5.3.2编写的内存块分配内存块,总结为7.5到8.5 GB(我已经使用calc预先计算了它)。每个块为1 MB。

应用程序在一个循环中分配内存,一次迭代分配1 MB内存 我只有8 GB的内存,但当我使用显示器查看它何时停止分配时,我发现它并不依赖于启动应用程序时容纳的内存量。

当应用程序分配4 GB并且它不依赖于系统中仍有2个空闲GB(在启动之前我有近6 GB的8个空闲空间)或者没有时,它总是停止分配。

所以我无法理解为什么会以这种方式发生,但我认为这是因为应用程序的x86结构。

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

我该如何解决这个问题?

我喜欢保存应用程序的x86结构并允许它分配超过4 GB的方法    但如果没有这样的解决方案,我会使用该应用程序的x64结构。

1 个答案:

答案 0 :(得分:2)

您的应用程序在4 GB之后停止填充内存的原因是因为它正在使用 32位指针。使用32位时,您只能表示2^32 4,294,967,296 字节的内存。从物理上讲,你不能填补更多空间。

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

不幸的是,这意味着您必须切换到64位,这样可以解决更多的内存位置。