什么是更昂贵的记忆。 “创建和删除对象”或“重用对象”?

时间:2012-02-22 13:34:58

标签: c++ visual-c++

我有一个每10秒就需要一个对象。 我应该继续删除该对象还是继续使用同一个对象? 对象在哪里所谓的“空闲时间”?

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

"creating and deleting objects" ?

"reusing a object" ?

感谢

4 个答案:

答案 0 :(得分:4)

这很大程度上取决于对象的性质和程序其余部分的内存使用情况,但作为一条经验法则:

如果您需要整个程序中的对象,请将其保留在内存中。如果它很小,那就无所谓了。如果它很大,那么每十秒重新创建它将对处理器造成压力,分配也可能有助于memory fragmentation

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

答案 1 :(得分:1)

重用对象更便宜,特别是如果创建和删除操作很昂贵(绘图,磁盘访问,下载),但在缓存中有太多可重用的对象可能会填满你的记忆。

答案 2 :(得分:1)

你的探查者说什么?

这在很大程度上取决于对象,编译器和使用的类型 正在制作它。有一次我对它进行了基准测试(以及std::string g++库,每次循环重新初始化), 每次在循环中重建对象都更快。在 另一方面,大多数其他标准容器甚至可以保留其记忆 当清空时;在这种情况下,如果你定义容器外面的 循环,它(通常)会很快到达其最终大小 没有其他分配。

当然,您必须考虑恢复的难度 对象是一个原始状态。对象几乎是不可能的 例如,来源于std::ios_base;你几乎总想用 一个新的std::ostringstream,而不是尝试重用现有的{{1}}。 尽管有成本。

答案 3 :(得分:0)

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