c++ - malloc 多个小时间或几个大时间更快?

标签 c++ c algorithm memory

当使用 malloc 分配内存时,对较小的数据 block 进行多次 malloc 还是对较大的数据 block 进行较少的 malloc 通常更快?例如,假设您正在处理一个包含黑色像素和白色像素的图像文件。您正在遍历像素并希望将每个黑色像素的 x 和 y 位置保存在一个新结构中,该结构还具有指向下一个和上一个像素 x 和 y 值的指针。使用指针为每个黑色像素的 x 和 y 值分配一个新结构来遍历像素通常会更快,还是通过遍历一次来计算黑色像素的数量,然后分配一个大的使用仅包含 x 和 y 值但不包含指针的结构的内存块,然后再次迭代,将 x 和 y 值保存到该数组中?我假设某些平台在哪个更快方面可能与其他平台不同,但每个人都认为什么通常会更快?

最佳答案

这取决于:

  • multiple small times就是多次,比较慢
  • 可能有针对小额分配的特殊/快速实现。

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

一般来说,我会假设越少越好:但是存在大小和运行时库实现,这样(足够)大的分配将被委托(delegate)给(相对较慢的)O/S。而(足够)小的分配将从(相对快速的)已经分配的堆中提供服务。

关于c++ - malloc 多个小时间或几个大时间更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1094215/

相关文章:

c++ - 应用程序崩溃,没有任何解释

c - Scanf 用于两个字符串和一个 float

algorithm - 如何根据点列表有效地计算间隔列表?

c++ - 64bit和32bit进程互通boost::message_queue

c++ - TicTacToe 的求解引擎

c - PortAudio 对连续输入流的实时音频处理

c - 二进制数中1的个数

algorithm - 打印动态规划解决方案中遍历的路径

objective-c - 沿标尺对象的边缘绘图

c++ - 在桌面应用程序中托管 Metro 应用程序