10

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

最近我偶然发现了ITK图像处理库,并意识到它们(实际上)总是将图像数据(甚至是 3D - 这可能是巨大的)分配为一个连续的块。有人告诉我这应该不是问题,至少对于 64 位进程而言。但是,我看不出 64 位和 32 位进程之间的系统差异,除了由于较大的虚拟地址空间可能会延迟内存问题。

言归正传:我想知道在处理大量数据时有什么好的做法:简单地将其分配为一个大块,还是更好地将其分成更小的块进行分配?

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

4

1 回答 1

6

这个问题几乎看起来很荒谬......让我改写一下来说明:

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

通过自己分段而不是让系统内存管理器为您分段,您不会获得任何收益。系统在这方面非常擅长,你不可能做得更好。

话虽如此,如果在所有条件相同的情况下,您可以完成相同的任务,但将其分解为合理的片段,那么可能值得分析一下您是否可以获得任何东西。但总的来说,你不会在合理的意义上获得任何东西——你将无法超越操作系统。

于 2012-07-03T08:06:43.907 回答