我正在使用Qt和C++,我需要找出特定Qt类的实例使用了多少内存,通常可以使用sizeof来完成,但在Qt中,每个类都持有指向另一个包含实际实现的类的指针,这个私有实现类的定义只存在于源代码中而不是头文件中。
我对Qt还不熟悉,也许有标准的方法来解决这个问题,如果没有,你有什么想法来解决吗?
在标准C++中没有办法做到这一点,很少有框架支持类似的功能。原因相当简单-正如您所观察到的那样,一个对象可能包含指针,并且那些指针可能指向进一步包含指针的对象,依此类推。即使当您到达指针链的末尾时,也没有通用方法可以找出指针指向多少内存。
因此,您需要找到另一种解决问题的方法,我不认为这是首先要解决的正确问题。
std::string
使用了多少空间,它既不是sizeof(std::string)
,也不是std::string::size()
。我发现在创建超过几千个实例时,QObject通常比较重。
正如其他人提到的那样,通常最好的方法是尝试一下并观察结果。你甚至可以编写一个类似于以下的小应用程序:
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QObject objects[5000];
return app.exec();
}
在退出应用程序之前,请先测量内存使用情况。
QObject
添加了很好的功能,但如果我们在嘲笑oom killer,它就不值得了。 - Freedom_Ben