我有一个问题,找不到解决方案(因为缺乏知识)。
问题是我的应用程序(用 c++
编写,用 mingw
x86
编译,使用 Qt
5.3.2 ) 分配内存块,总的来说应该容纳 7.5 到 8.5 GB(我已经使用 calc 预先计算了这个)。每个 block 为 1 MB。
应用程序在一个周期内分配内存,一次迭代分配 1 MB 内存。
我只有 8 GB 的内存,但是当我使用监视器查看它何时停止分配时,我发现它不依赖于启动应用程序时容纳了多少内存。
它总是在应用程序分配 4 GB 时停止分配,这并不取决于系统中仍有 2 GB 空闲空间(在开始之前我有将近 6 GB 空闲 8 GB)或没有。
所以我不明白为什么会这样,但我认为这是因为应用程序的 x86 结构。
但我也需要在 x86 系统上使用该应用程序(我知道不可能有超过 4 GB 的 x86 系统)。
我该如何解决这个问题?
我更喜欢保存应用程序的 x86 结构并允许它分配超过 4 GB 的方法。
但如果没有这样的解决方案,我将不得不使用应用程序的 x64 结构。
最佳答案
您的应用程序在 4 GB 后停止填充内存的原因是因为它正在使用 32 位指针。对于 32 位,您只能表示 2^32
或 4,294,967,296 字节的内存。从物理上讲,您无法填满更多空间。
更具体地说,您的程序还可以从操作系统获得最大 4 GB 的页面,因此使用 2 个 32 位指针无济于事。
不幸的是,这意味着您必须切换到 64 位,这将允许处理更多的内存位置。
关于c++ - 在c++中使用x64系统和x86应用程序分配大内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887245/