如何在C++;? 如果在我的C++程序中需要一个大的缓冲区,哪一个更好?< /P>

如何在C++;? 如果在我的C++程序中需要一个大的缓冲区,哪一个更好?< /P>,c++,memory,C++,Memory,在堆中分配缓冲区,并在类中保留对该缓冲区的引用 那就用它吧 分配一个静态缓冲区,并使其成为全局缓冲区 静态缓冲区的缺点是,您永远不知道它将在何时被删除,如果您想在销毁某个对象时使用该缓冲区,它可能已经消失了。因此,为了更好地控制,我会选择选项1。如何:3。使用向量 [编辑为add:或boost::array是一个很好的选择,如果您对依赖关系满意的话]出于许多原因,我更喜欢堆分配- 我喜欢它的主要原因是,它提供了一种在运行时验证分配是否成功的方法。当您尝试分配内存时,无论出于何种原因失败都是显而易

在堆中分配缓冲区,并在类中保留对该缓冲区的引用 那就用它吧

  • 分配一个静态缓冲区,并使其成为全局缓冲区


  • 静态缓冲区的缺点是,您永远不知道它将在何时被删除,如果您想在销毁某个对象时使用该缓冲区,它可能已经消失了。因此,为了更好地控制,我会选择选项1。

    如何:3。使用向量


    [编辑为add:或boost::array是一个很好的选择,如果您对依赖关系满意的话]

    出于许多原因,我更喜欢堆分配-

    我喜欢它的主要原因是,它提供了一种在运行时验证分配是否成功的方法。当您尝试分配内存时,无论出于何种原因失败都是显而易见的,与使用静态缓冲区相比,您可以更优雅地处理这一问题


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

    您的程序做什么?如果缓冲区持续时间与应用程序一样长,并且您在编译时知道它的大小,那么可以随意使用静态缓冲区


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

    处理大量内存时,必须查看两个生命周期:创建和重新创建缓冲区的时间。随着内存的碎片化,有时您会尝试分配一个512MB的缓冲区,但您不能,因为您的分配器找不到512MB的连续地址空间。这就是为什么@onebyone使用向量的想法有时更好。如果您可以将内存占用减少到字节大小(不是字面意义上的)块,那么您就可以灵活地管理内存


    也就是说,我几乎从不建议保留一个大的静态缓冲区。它是在自找麻烦。

    这真的不能回答问题-它基本上只是建议1),因为向量只是包装形式的堆分配。@Reed:是的。这意味着-使用堆内存,但避免自己管理。里德:我认为这个答案让OP重新思考缓冲区管理,因为它是+1。当然,它直接回答了标题中的问题,并隐式地提倡(1)而不是(2)。但我不想说“do1”,因为它的意思是“调用new并将结果指针存储在任何地方”。您的应用程序是多线程还是单线程的?