如何在C ++中管理大缓冲区?

时间:2009-07-31 16:40:59

标签: c++ memory

如果我在用C ++编写的程序中需要一个大缓冲区,哪一个更好?

  1. 在堆中分配缓冲区,并在类中保留对该缓冲区的引用 使用它。

  2. 分配静态缓冲区,并使其成为全局缓冲区。

5 个答案:

答案 0 :(得分:14)

如何:3。使用矢量。

[如果您对依赖项感到满意,可以添加:或者boost :: array是一个很好的选择]

答案 1 :(得分:2)

静态缓冲区的缺点是你永远不知道什么时候会被删除,如果你想在破坏某个对象时使用那个缓冲区,它可能已经消失了。因此,为了获得更多控制权,我会选择选项1。

答案 2 :(得分:2)

我更喜欢堆分配,原因有很多 -

我更喜欢它的主要原因是它为您提供了一种在运行时验证分配是否成功的方法。当你试图分配内存时,无论出于何种原因,它都会很明显,并且你可以比使用静态缓冲区更优雅地处理它。

它还允许您分配各种大小的缓冲区,并在以后重新分配/释放。

答案 3 :(得分:1)

您的计划有何功能?如果缓冲区和应用程序一样长,并且在编译时知道它的大小,那么可以随意使用静态缓冲区。

另外,正如已经提到的,考虑使用向量(除非你有基准来表明性能太差)以防止缓冲区溢出。

答案 4 :(得分:1)

在处理大量内存时,您必须考虑两件事,生命周期,创建和重新创建此缓冲区的频率。当内存碎片化时,可能会有一段时间你尝试分配512MB的缓冲区,而你却不能,因为你的分配器找不到512MB的连续地址空间。这就是@ onebyone使用向量的想法有时更好的原因。如果您可以将占用空间减少到字节大小(非字面)块,则可以灵活地管理内存。

那就是说,我几乎不建议保留一个大的静态缓冲区。这是在寻找麻烦。