Qt Creator-calloc因内存过大而失败

Qt Creator - calloc fails with large memory

本文关键字:失败 内存 Creator-calloc Qt      更新时间:2023-10-16

我的Qt Creator或它的某个组件有问题。

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

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

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

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

你有三种方法来解决你的问题:

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

  • 将您的Qt代码与C程序分离。然后,C程序仍然可以使用64位目标编译器,Qt/C++部分仍然可以使用32位目标编译器。您可以通过任何进程间通信机制与C程序进行通信。(实际上,标准输入/输出流通常就足够了)

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