我遇到了问题而无法找到解决方案(因为缺乏知识)。
问题是我的应用程序(使用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结构。
答案 0 :(得分:2)
您的应用程序在4 GB之后停止填充内存的原因是因为它正在使用 32位指针。使用32位时,您只能表示2^32
或 4,294,967,296 字节的内存。从物理上讲,你不能填补更多空间。
更具体地说,您的程序也可以从操作系统中获得最大 4 GB的页面,因此使用2个32位指针将无济于事。
不幸的是,这意味着您必须切换到64位,这样可以解决更多的内存位置。