内存更贵。 "creating and deleting objects"还是"reusing a object"?

what is more expensive for the memory. "creating and deleting objects" or "reusing a object"?

本文关键字:reusing 还是 object objects and creating 内存 deleting      更新时间:2023-10-16

我有一个对象,每 10 秒就需要在整个游戏中使用。我应该继续删除对象还是继续使用相同的对象?在所谓的"空闲时间"中,对象在哪里?

由于这是一款手机游戏,内存是一个问题。所以,只是想知道哪种方法会富有成效。

"creating and deleting objects" ?

"reusing a object" ?

谢谢

这在很大程度上取决于对象的性质和程序其余部分的内存使用,但根据经验

如果在整个程序中都需要该对象,请将其保留在内存中。如果它很小,那就没关系了。如果它很大,那么每十秒重新创建一次它将对处理器造成压力,并且分配也可能导致内存碎片。

如果您选择按照我的建议使对象保持活动状态,那么当它不使用时,它将位于RAM中并占用一些空间(假设您的移动平台没有交换内存(。

重用对象更便宜,尤其是在创建和删除操作成本很高(绘图、磁盘访问、下载(的情况下,但缓存中有太多可重用对象可能会占用内存。

你的探查器怎么说?

这在很大程度上取决于对象、编译器和使用类型正在制作它。 有一次我对其进行了基准测试(并std::stringg++库,每次通过循环重新初始化(,每次在循环中重建对象的速度更快。 在另一方面,大多数其他标准容器甚至保留其内存清空时;在这种情况下,如果在循环,它将(通常(相当快地达到其最终大小,之后不会有其他分配。

当然,您必须考虑恢复的难度原始状态的对象。 对于物体来说几乎是不可能的例如,从std::ios_base派生;您几乎总是想使用一个新的std::ostringstream,而不是试图重用现有的。尽管成本很高。

当对象不再使用时,将调用析构函数以释放内存。但是,如果随后创建相同类型的新对象,则会调用构造函数以分配新内存。这肯定会降低性能(但是,在实践中,这也取决于对象的大小(,因此,如果在程序执行期间不再需要某个对象,则应通过更改其内容来重用它。