
最近在Qt项目中发现,程序运行内存越来越大,然后使用_CrtDumpMemoryLeaks进行内存检查,发现很多泄漏提示,但是检查代码没发现问题
于是使用VS2010 创建了一个Qt console程序,代码如下,
#include <QtCore/QCoreApplication>
#include <asserth>
//
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <crtdbgh>
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, FILE, LINE)
#define new DEBUG_CLIENTBLOCK
static void Exit()
{ int i = _CrtDumpMemoryLeaks(); assert( i == 0);
}
#define CheckMemoryLeaks() {atexit(Exit);}
#else
#define DEBUG_CLIENTBLOCK
#define CheckMemoryLeaks() ;
#endif
//
int main(int argc, char argv[])
{ CheckMemoryLeaks(); QCoreApplication a(argc, argv);
return aexec(); }
===========================================================================
输出信息如下:
Detected memory leaks!
Dumping objects ->
{176} normal block at 0×013A57F0, 12 bytes long Data: < L ]L ]> 00 00 00 00 4C CF 1C 5D 4C CF 1C 5D
{175} normal block at 0×013A57A8, 12 bytes long Data: < L ]L ]> 00 00 00 00 4C CF 1C 5D 4C CF 1C 5D
{174} normal block at 0×013A56F8, 112 bytes long Data: < ] V: L ]> 8C CB 1B 5D B0 56 3A 01 00 00 00 00 4C CF 1C 5D
{173} normal block at 0×013A56B0, 8 bytes long Data: < ] V: > 98 CB 1B 5D F8 56 3A 01
{172} normal block at 0×013A5670, 4 bytes long Data: <L ]> 4C CF 1C 5D
{171} normal block at 0×013A5620, 20 bytes long Data: <@ ]@ ]@ ]@ ]> 40 20 1C 5D 40 20 1C 5D 40 20 1C 5D 40 20 1C 5D
{170} normal block at 0×013A55E0, 4 bytes long Data: <@ ]> 40 20 1C 5D
{156} normal block at 0×013A5530, 16 bytes long Data: < > 01 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{155} normal block at 0×013A54F0, 4 bytes long Data: <0U: > 30 55 3A 01
{154} normal block at 0×013A5288, 552 bytes long Data: < R: > 83 00 00 00 83 00 00 00 98 52 3A 01 CD CD CD CD
{151} normal block at 0×013A50D8, 108 bytes long Data: < ] P: L ]> E8 B9 1B 5D 90 50 3A 01 00 00 00 00 4C CF 1C 5D
{150} normal block at 0×013A5090, 8 bytes long Data: < ] P: > A8 B9 1B 5D D8 50 3A 01
{149} normal block at 0×013A5018, 60 bytes long Data: < P: > 02 00 00 00 90 50 3A 01 FC 1B 00 00 00 CD CD CD
{145} normal block at 0×013A4E58, 32 bytes long Data: < > 01 00 00 00 04 00 00 00 00 00 00 00 01 00 00 00
{144} normal block at 0×013A4E08, 20 bytes long Data: < 4)] \5] \5]( 1]> BC 34 29 5D F0 5C 35 5D 90 5C 35 5D 28 82 31 5D
{143} normal block at 0×013A4DC8, 4 bytes long Data: <XN: > 58 4E 3A 01
{142} normal block at 0×013A4D78, 16 bytes long Data: < > 01 CD CD CD 00 00 00 00 00 00 00 00 00 00 00 00
{141} normal block at 0×013A4D38, 4 bytes long Data: <xM: > 78 4D 3A 01
Object dump complete
树莓派运行Qt所需的内存量取决于多个因素,例如Qt应用程序的复杂性和功能,以及所运行的 *** 作系统版本等。
一般来说,对于较简单的Qt应用程序,例如基本的图形界面应用程序,512MB到1GB的内存可以满足要求。而对于更复杂的应用程序,例如涉及大量图像处理或数据处理的应用程序,建议使用1GB以上的内存。
需要注意的是, *** 作系统的运行也需要占用一定的内存,因此建议在选择树莓派型号时,尽可能选择内存较大的型号,以确保运行Qt应用程序时有足够的可用内存。
5x增加了很多新特性的确大了一些,如果只是写个小程序,不需要5x的新特性,那么推荐Qt 47x/48x,但是运行内存(任务管理器里的内存占用)从老版本的200M不到上升到550M了。
在Qt4中,Qt提供的全部图形界面相关类都包含在Qt Gui模块中,但QT5将一些图形界面类移到了QT widgets模块中。
最近在研究用静态编译的 Qt 做个 Qt 的安装包程序,因为 nsis 在界面自定义还有多语言适配等问题上不太理想。做安装包程序基本上只需要有最基础的 Qt 界面模块即可,不过把除了 UI 的模块全部去掉又比较难用这里记录下两种极端编译配置下生成的程序大小作为参考。
编译需要的环境可以看官方文档, windows-requirements 中的 Building from Source 有说明需要安装的工具,所有工具都记得要添加到环境变量。
最后的-mp 是多核编译的参数,多核编译用 jom 快得一匹,全模块也只要 20 分钟编译完成。
这个配置把能删的模块都删了,编译出来后基本也就基础UI相关类能用所以编译起来超快的。
比全模块配置生成的exe减少了 30%的大小,不过 30%也就 3M,在 windows 平台的话倒是没必要追求这种极致了=-=
此时如果是移动了编译后的路径,可能报错 Qt version is not properly installed,please run make install 。在 qmakeexe 所在目录新建一个 qtconf 文件,并添加下面的内容即可:
以上就是关于Qt程序是不是会内存泄漏全部的内容,包括:Qt程序是不是会内存泄漏、树莓派运行qt需要多少内存、qt5比qt4程序内存大等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)