获取Qt对象的大小

Dia*_*ami 6 c++ qt

我正在使用Qt和C++,我需要找出某些Qt类的实例使用的内存量,这通常使用sizeof来完成,但是在Qt中每个类都包含一个指向包含实际实现的另一个类的指针,在头文件中找不到此私有实现类的定义,但仅在源代码中找到.

我是QT的新手,所以可能有一种标准的方法可以做到这一点,如果你没有任何想法来解决这个问题?

小智 10

在标准C++中无法做到这一点,很少有框架支持类似的东西.原因很简单 - 正如您所观察到的,对象可能包含指针,而这些指针可能指向包含指针的其他对象,依此类推.即使到达指针链的末尾,也没有通用的方法来确定指针指向的内存量.

所以,你需要找到另一种方法来解决你的问题,我认为这不是首先要解决的问题.


Jer*_*ner 7

这个问题没有确切的答案,因为为同一类型的不同对象分配的内存量可能甚至不相同(例如,QSomething A可能能够重用缓存中的某些数据,而QSomething B可能必须单独分配它等).

我想你可以做的是写一个简单的测试程序,启动,分配有问题的对象的N,然后进入sleep()很长一段时间.当程序正在休眠时,使用任务管理器(或您喜欢的任何工具)来查看进程使用多少RAM.然后ctrl-C(或杀死)该过程,并使用较大的N值再次运行它,并重复测量.重复这个过程,最后你会知道进程的RAM分配如何随着分配的项目数量而增长,然后你可以做一个小代数来得到每个对象的平均内存成本.

(请记住,在启动过程时会有很多内存开销,因此从所有情况中减去N = 0情况所使用的内存,这样您只需测量对象的成本而不是环境开销)


MSa*_*ers 5

事实上,这个问题并不是Qt独有的.考虑使用多少空间std::string.它既不是sizeof(std::string)也不是std::string::size().

C++没有这个问题的答案,因为这个问题很少有意义.

  • 对于std :: string,使用sizeof(std :: string)+ string length可以得到几乎正确的数字.人们应该知道一个对象有多重,能够编写有效的应用程序.我觉得奇怪的是,在允许低级编程的语言中这样的问题很少有意义并给你绝对的控制. (2认同)