如果我需要在我的C++程序中使用一个大的缓存,哪种方法更好?
在堆上分配缓冲区,并在使用它的类中保留对该缓冲区的引用。
分配一个静态缓冲区,并使其成为全局变量。
如何实现:3. 使用向量(vector)。
[编辑补充:如果您满意于此依赖项,则boost::array是一个不错的选择]
使用静态缓冲区的缺点是你无法确定它何时被删除,如果你想在某个对象销毁期间使用该缓冲区,它可能已经不存在了。因此,为了更好地控制,我会选择选项1。
我更喜欢堆分配,有很多原因:
我偏爱堆分配的主要原因是它可以在运行时验证分配是否成功。当您尝试分配内存时,如果由于任何原因失败,将显而易见,并且您可以比使用静态缓冲区更优雅地处理它。
它还允许您分配各种大小的缓冲区,并在以后重新分配/释放(如果可能)。
在处理大量内存时,你需要考虑两件事情:生命周期和创建和重新创建此缓冲区的频率。随着内存碎片化,可能会出现这样一种情况:尝试分配512MB缓冲区,由于分配器无法找到512MB的连续地址空间,因此无法分配。这就是为什么@onebyone使用向量的想法有时更好。如果您可以将占用空间减少到字节大小(不是真的),则可以在管理内存时获得灵活性。
话虽如此,我几乎从不建议保留大型静态缓冲区。那是在找麻烦。