2013-05-16 43 views
2

垃圾回收器我有一块代码,做了大量的内存分配。处理内存,像

我想知道,如果有,我可以实现重用以前删除的存储模式(因为我建立了很多,像int*char*等分配内存的临时对象..但它可以是非常巨大的) 。

我的目的是优化,所以我想重复使用内存,即使在使用临时对象时也不要“删除”内存。

它可能不够清楚,请告诉我,以便我可以发布一些代码来向您显示问题。

+0

http://stackoverflow.com/q/8016945/841108是一个非常类似的问题,使用Boehm垃圾回收器(它将*重用“未使用”的内存) –

+13

你想要的东西称为“对象池”。该关键字应该可以帮助您找到足够的信息开始使用。 –

+0

为了记录,许多分配器通过预先实现内存块然后从列表中分发指针来实现这一点。 (我认为'新'是这样做的,但是我对新的/删除不太了解) – GRAYgoose124

回答

1

将临时对象的创建委托给一个类。

正如Dan指出的那样,您需要通过重载该类中的新运算符和删除运算符来实现内存管理器或池。

当第一次调用new时分配大块内存并将其分成固定大小的块。继续使用这些块作为临时对象。 当调用删除时,只需更新该块的分配状态。

完成使用临时对象后,请删除大块。

+0

我想我是这样做的,谢谢大家!如果我遇到麻烦,我会告诉你。 – jav974

0

我所做的只是确保对象中有一个备用指针。 然后,而不是“删除”我只保留一个以前使用的对象的链接列表,并将其推到列表的前面。 而不是“新”我弹出一个。 如果列表为空,那就是当我制作一个真正新的。