内存更贵。 "creating and deleting objects"还是"reusing a object"?
what is more expensive for the memory. "creating and deleting objects" or "reusing a object"?
我有一个对象,每 10 秒就需要在整个游戏中使用。我应该继续删除对象还是继续使用相同的对象?在所谓的"空闲时间"中,对象在哪里?
由于这是一款手机游戏,内存是一个问题。所以,只是想知道哪种方法会富有成效。
"creating and deleting objects" ?
或
"reusing a object" ?
谢谢
这在很大程度上取决于对象的性质和程序其余部分的内存使用,但根据经验
:如果在整个程序中都需要该对象,请将其保留在内存中。如果它很小,那就没关系了。如果它很大,那么每十秒重新创建一次它将对处理器造成压力,并且分配也可能导致内存碎片。
如果您选择按照我的建议使对象保持活动状态,那么当它不使用时,它将位于RAM中并占用一些空间(假设您的移动平台没有交换内存(。
重用对象更便宜,尤其是在创建和删除操作成本很高(绘图、磁盘访问、下载(的情况下,但缓存中有太多可重用对象可能会占用内存。
你的探查器怎么说?
这在很大程度上取决于对象、编译器和使用类型正在制作它。 有一次我对其进行了基准测试(并std::string
g++
库,每次通过循环重新初始化(,每次在循环中重建对象的速度更快。 在另一方面,大多数其他标准容器甚至保留其内存清空时;在这种情况下,如果在循环,它将(通常(相当快地达到其最终大小,之后不会有其他分配。
当然,您必须考虑恢复的难度原始状态的对象。 对于物体来说几乎是不可能的例如,从std::ios_base
派生;您几乎总是想使用一个新的std::ostringstream
,而不是试图重用现有的。尽管成本很高。
当对象不再使用时,将调用析构函数以释放内存。但是,如果随后创建相同类型的新对象,则会调用构造函数以分配新内存。这肯定会降低性能(但是,在实践中,这也取决于对象的大小(,因此,如果在程序执行期间不再需要某个对象,则应通过更改其内容来重用它。
- enum是C++中的宏变量还是整数变量
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 在命名空间中定义函数还是限定函数
- 架构决策:返回std::future还是提供回调
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 异常属于C++中的线程还是进程
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 如何在C++中确定文本文件中的元素是字符还是数字
- 返回值优化:显式移动还是隐式
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在这种情况下,我真的复制了字节还是复制了字符?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- CIN是逻辑1还是0?
- i++还是++i更适合这个程序?
- 我应该将外部标头放在 .h 文件还是.cpp文件中?
- 内存更贵。 "creating and deleting objects"还是"reusing a object"?