更快到malloc多次小时或几次?

use*_*293 5 c c++ memory algorithm

当使用malloc分配内存时,通常可以更快地执行多个较小数据块的malloc或更少的大块数据malloc吗?例如,假设您正在处理具有黑色像素和白色像素的图像文件.您正在迭代像素,并希望将每个黑色像素的x和y位置保存在一个新结构中,该结构还具有指向下一个和前一个像素x和y值的指针.迭代通过为指针分配每个黑色像素的x和y值的新结构的像素通常会更快,或者通过迭代一次获得黑色像素数的计数会更快,然后分配一个大的使用仅包含x和y值但没有指针的结构的内存块,然后再次迭代,将x和y值保存到该数组中?我假设某些平台可能与其他平台不同,哪个更快,但每个人认为通常会更快?

Chr*_*isW 20

这取决于:

  • 多个小时间意味着多次,这是较慢的
  • 小分配可能有特殊/快速实施.

如果我关心,我会测量它!如果我真的非常关心,并且无法猜测,那么我可以实现两者,并在目标机器上的运行时进行测量,并相应地进行调整.

一般来说,我认为越少越好:但是有大小和运行时库实现,这样(足够)大的分配将被委托给(相对慢的)O/S. 而(一个(足够)小的分配将从(相对快速的)已分配的堆中提供.

  • 引用克里斯威的话说:"如果我关心,我会测量它!" (3认同)

Nic*_*wis 14

分配大块更有效; 此外,由于您使用较大的连续块,因此您具有更大的引用位置,并且在生成内存结构后遍历您的内存结构也应该更高效!此外,分配大块应该有助于减少内存碎片.

  • @Javier:一般来说,重新分配由较小块组成的一个较大块在碎片方面更好,然后通过它们自己分配/解除分配那些较小的块.我不能用500多个字符证明它,但你也无法证明你的大胆陈述. (2认同)

Jef*_*f L 5

通常来说,分配更大的内存块更少的时间会更快。每次调用malloc()都会涉及开销。

  • 有关更多信息,请参阅Bonwick关于平板分配的Usenix论文。http://www.usenix.org/publications/library/proceedings/bos94/full_papers/bonwick.a (2认同)