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

标签 c++ qt memory 64-bit mingw32

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

问题是我的应用程序(用 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^324,294,967,296 字节的内存。从物理上讲,您无法填满更多空间。

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

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

关于c++ - 在c++中使用x64系统和x86应用程序分配大内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887245/

相关文章:

c - 一个进程是否可以在运行时更改另一个进程中的变量值?

c++ - 我可以使用 opencv 函数,例如 cv::multiply 和 std::vector<cv::Mat> 作为输入和输出参数吗?

c++ - 如何将元素插入 std::unordered_map<int, vector<Object*>>

c++ - 批准的避免左值转换警告和错误的方法?

c++ - QFutureWatcher 不调用连接槽

c++ - 调试虚函数

使用 goto 返回不同输出的代码

c# - 在C#中导入C++ DLL,函数参数

c++ - “QObject”是 'Recorder' 的不明确基数

linux - 使用hexdump检查/dev/mem时,为什么有些地址不见了?