我有一个 Qt 应用程序,当列表更新时,列表中的大量 QObject
经常被分配和删除。
随着时间的推移,堆变得严重碎片化,内存使用量增加。
我通常会创建一个对象池,在其中将它们连续分配到一个大块中,但是这对于 QObject
是不可能的。
每个QObject
都必须单独分配,这是一个性能问题。更糟糕的是,有一个对象层次结构,所以 parent 删除他们的 child ,而我无权访问删除调用,所以我不能只写 MyPool->Free(obj)
;
除非我重载 new
和 delete
运算符?
最佳答案
这不会有太大帮助。为了保持二进制兼容性,QObject
使用了 PIMPL 习惯用法。 QObject
很像这样:
class QObject {
QObjectData *d;
};
和sizeof(QObject) == sizeof(void *)
。 d 指针的实际分配具有“合理的”大小(并将触发进一步的分配),这几乎完全超出您的控制范围,除非您愿意进行大量修改...
关于c++ - Qt 堆碎片 - QObjects 可以放在内存池中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34313887/