矢量内存管理

时间:2012-06-04 11:33:07

标签: c++ vector

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

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
}

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

这种载体用法的优点和缺点是什么?当我的课程在其功能中需要很多向量时,我应该使用哪一个?从记忆管理网站看哪一个更好看?

3 个答案:

答案 0 :(得分:9)

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

  • 您在多线程环境中变得不那么线程安全 - 您可能需要围绕使用向量在每个方法中实现一些同步
  • 您需要记住清除每种方法中的向量内容

答案 1 :(得分:6)

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

简而言之,如果它的生命周期与对象的生命周期相关联,则应将其用作成员 如果没有,您只需要本地向量 无论第一种方法还是第二种方法更适合您的使用,Micro-Optimization都会避免使用它们,除非您的使用量足够大以至于担心避免使用它。

答案 2 :(得分:1)

不要仅仅为了重新使用而制作成员向量。某事物是否属于成员应该基于阶级的逻辑。