4

我对 Qt Creator 或其组件之一有疑问。

我有一个需要大量内存(大约 4 GB)的程序,我使用 calloc 来分配它。如果我使用 mingw/gcc(不使用 Qt 框架)编译 C 代码,它可以工作,但是如果我在 Qt Creator 中编译它(使用 C++ 将 C 代码嵌入到 Qt 框架中),使用 mingw/gcc 工具链, calloc 返回一个空指针。

我已经搜索并找到了 qt-pro 选项QMAKE_LFLAGS += -Wl,--large-address-aware,它适用于某些情况(大约 3.5GBytes),但如果我超过 4GBytes,它只适用于使用 gcc 编译的 C 代码,而不适用于 Qt。

使用 Qt Creator 编译时,如何使用 calloc 分配所需的内存量?

4

1 回答 1

1

因此,您的cigwin工具链会为您构建 64 位应用程序。可以由 64 位应用程序分配的内存的可能大小是 2 64字节,远远超过 4Gb。但是 Qt Creator(如果您从 QtSDK 安装它并且没有手动重新配置它)使用 Qt 的工具链,它构建 32 位应用程序。理论上,您可以通过 32 位应用程序分配 4Gb 的内存,但不要忘记,所有库也将加载到此内存中。在实践中,您可以分配大约 3 Gb 的内存,而不是在一个连续的块中。

您有 3 种方法可以解决您的问题:

  • 重新考虑你的算法。不要分配 4Gb 的 RAM、使用更智能的数据结构或使用磁盘缓存等。我相信如果您的问题实际上需要超过 4 GB 的内存来解决,您就不会问这个问题。

  • 将 Qt 代码与 C 程序分开。然后,您仍然可以将 64-bit-target-compiler 用于 C 程序,将 32-bit-target-compiler 用于 Qt/C++ 部分。您可以通过任何进程间通信机制与您的 C 程序进行通信。(实际上标准输入/输出流通常就足够了)

  • 移动到 64 位。我的意思是,对 C 和 C++ 代码都使用 64 位目标编译器。但这并不像人们想象的那么简单。您需要在 64 位模式下重建 Qt。关闭一些模块和一些代码修复(我试过一次)是可能的,但Windows 64 位官方不支持

于 2012-09-27T17:08:43.190 回答