分配大块连续内存 - 做或不做?

时间:2012-07-03 07:58:33

标签: c++ memory-management

我一直相信分配大块连续内存不是一个好习惯。很明显,如果内存碎片发挥作用,您可能会遇到麻烦,在大多数情况下无法将其排除在外(特别是在设计为服务等的大型项目中)。

最近,我来到ITK图像处理库并意识到,他们(实际上)总是将图像数据(甚至3D - 可能很大)分配为一个连续的块。我被告知这应该不是问题,至少对于64位进程而言。但是,我没有看到64位和32位进程之间存在系统性差异,除了由于更大的虚拟地址空间而导致内存问题可能会延迟。

要说明一点:我想知道在处理大量数据时有什么好的做法:简单地将其分配为一个大块,或者更好地将其分成更小的块以进行分配?

由于问题当然是系统特定的,我想将其限制为原生(非托管,无CLR)C ++,尤其是在Windows下。但是,如果可能的话,我也会对任何更一般的评论感兴趣。

1 个答案:

答案 0 :(得分:6)

这个问题几乎看似毫无意义......让我用它来说明一下:

  

如果你需要一大块内存并担心碎片,你应该自己分割它吗?

你不会通过自己分割来获得任何东西,而不是让系统内存管理器为你分割它。系统非常擅长这一点,你不太可能做得更好。

话虽如此,如果所有事情都是平等的,你可以做同样的任务但是会分成合理的碎片,那么看看你是否能获得任何东西可能是值得的。但总的来说,你不会在合理的意义上获得任何东西 - 你将无法超越操作系统。