加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – Qt Creator – calloc因大内存而失败

发布时间:2020-12-16 07:01:33 所属栏目:百科 来源:网络整理
导读:我有Qt Creator或其中一个组件的问题. 我有一个需要大量内存(大约4 GB)的程序,我使用calloc来分配它.如果我使用mingw / gcc编译C代码(不使用Qt框架)它可以工作,但如果我在Qt Creator中编译它(使用C嵌入Qt框架中的C代码),使用mingw / gcc工具链,calloc返回一
我有Qt Creator或其中一个组件的问题.

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

我已经搜索并发现qt-pro选项QMAKE_LFLAGS = -Wl,– 大地址感知,适用于某些情况(约3.5GBytes),但如果我超过4GBytes,它只适用于编译的C代码gcc,而不是Qt.

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

解决方法

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

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

>重新考虑你的算法.不要分配4Gb的RAM,使用更智能的数据结构,或使用磁盘缓存等.我相信如果你的问题实际上需要超过4 GB的内存来解决,你不会问这个问题.
>将您的Qt代码与C程序分开.然后,您仍然可以将64位目标编译器用于C程序,将32位目标编译器用于Qt / C部分.您可以通过任何interprocess communication机制与C程序进行通信. (实际上标准的输入/输出流通常就足够了)
>移至64位.我的意思是,对C和C代码使用64位目标编译器.但人们可以想到,这并不是那么简单.您需要在64位模式下重建Qt.关闭一些模块和一些代码修复(我尝试过一次)是可能的,但是Windows 64 bit officially not supported.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读