Qt Creator-calloc因内存过大而失败
Qt Creator - calloc fails with large memory
我的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位。
- 当需要超过16GB的连续内存时,内存分配失败
- 在c++中删除内存失败
- 在构造函数中分配内存失败是如何冒泡的
- CudaMalloc 在分配内存时失败
- 获取进程内存信息失败,错误 6 句柄无效
- 如何防止连续使用"new"时分配失败时内存泄漏
- 无论如何如何重新分配内存,即使 realloc() 在 c++ 中失败
- std::vector<std::vector<int>>:调试断言失败。C++矢量下标超出范围保留内存
- 根 - 填充失败分支:内存驻留树
- 使用GDI+删除位图和CLSID对象时,C++内存管理失败
- C++内存分配失败(使用 new & delete)
- 合并排序逻辑分配内存失败
- 如何创建随机内存分配失败
- 释放内存失败:free():下一个大小无效(快速):
- 文件读取时,文件读取失败后,内存已满
- C++健全性检查失败:几个变量/内存位置被更改为垃圾,即使我从未访问过它们
- Qt Creator-calloc因内存过大而失败
- 内核AIO(libaio)写入请求在启动时从保留的内存中写入时失败
- 为什么 2^80 字节的内存分配不会失败?
- 在Windows上重复数百次后,C++屏幕捕获失败:内存泄漏