Jak*_* S. 10 c++ memory-management
我一直相信分配大块连续内存不是一个好习惯.显然,如果内存碎片发挥作用,您可能会遇到麻烦,在大多数情况下无法将其排除在外(特别是在设计为服务等的大型项目中).
最近,我来到ITK图像处理库并意识到,他们(实际上)总是将图像数据(甚至3D - 可能很大)分配为一个连续的块.我被告知这应该不是问题,至少对于64位进程而言.但是,我没有看到64位和32位进程之间存在系统性差异,除了由于更大的虚拟地址空间而导致内存问题可能会延迟.
要说明一点:我想知道在处理大量数据时有什么好的做法:简单地将其分配为一个大块,或者更好地将其分成更小的块进行分配?
由于问题当然是系统特定的,我想将其限制为原生(非托管,无CLR)C++,特别是在Windows下.但是,如果可能的话,我也会对任何更一般的评论感兴趣.
这个问题几乎看似毫无意义......让我用它来说明:
如果你需要一大块内存并且担心碎片,你应该自己分割一下吗?
你不会通过自己分割它而不是让系统内存管理器为你分割它来获得任何东西.系统非常擅长这一点,你不太可能做得更好.
话虽如此,如果所有事情都是平等的,你可以做同样的任务,但会分成合理的碎片,看看你是否能获得任何东西可能值得分析.但总的来说,你不会在合理的意义上获得任何东西 - 你将无法超越操作系统.