矢量内存管理

Vector memory management

本文关键字:管理 内存      更新时间:2023-10-16

从内存管理站点看,对函数中使用的所有临时向量使用一个向量类成员有什么区别:

class A
{
   private:
   vector<Type> m_vector;
}
void fnc()
{
   m_vector.clear();
   m_vector.push_back();
   //further operations on vector
}

并在函数内部创建温度向量:

void fnc()
{
    vector<Type> vector;
    //further operations on vector
}

我想第一个选项会导致更少的内存碎片,因为我们正在执行一个分配并使用这个区域,而在第二个情况下,我们为不同函数中的向量分配内存,这会导致内存碎片。

这种矢量用法的优缺点是什么?当我的函数中需要许多向量的类时,我应该使用哪一个?从记忆管理网站来看,哪一个更好看?

从内存管理的角度来看,您的解决方案可能更好,因为碎片和较少的分配/解除分配,但是:

  • 在多线程环境中,线程安全性降低 - 您可能需要围绕向量的使用在每个方法中实现一些同步
  • 您需要记住清除每种方法中的载体内容

简单规则:
如果您希望向量存在到类对象的生存期,请使其成为类成员,否则不要。

简而言之,如果对象的生存期

与对象的生存期相关联,则应将其用作成员。
如果没有,您只需要本地向量。
无论第一种方法还是第二种方法更适合您的用法,微优化都会避免它们,除非您的用法预计会重到足以担心避免它。

不要仅仅为了重用而制作成员向量。某物是否是成员应该基于类的逻辑。