代码之家  ›  专栏  ›  技术社区  ›  Benj

堆栈和堆上的STL容器

  •  17
  • Benj  · 技术社区  · 15 年前

    如果std::vector和friends正在自我调整大小,这是否意味着如果我声明一个这样的向量:

    std::vector<string> myvec;
    

    然后它将使用更多的堆栈调整大小,而:

    std::vector<string> *myvec = new std::vector<string>();
    

    会使用更多堆调整大小吗?

    3 回复  |  直到 15 年前
        1
  •  24
  •   Arkaitz Jimenez    15 年前

    向量在堆内部分配。

    在堆栈中为基于堆栈的Bector支付的唯一费用是几个字节,内部缓冲区将始终从堆中分配。

    因此,当您执行vec=new vector()时,实际上是在分配一个小的数量,这可能不是很好。

        2
  •  9
  •   Naveen    15 年前

    在第一种情况下,您将在堆栈上创建向量。这并不意味着所有向量内部对象都在堆栈中。实际上,vector仍将分配仅在堆上保存对象所需的内存。这是因为,要在堆栈上分配,您应该知道要创建多少对象。但是这些信息不可用,所以剩下的唯一选项是为堆中包含的对象分配内存。

        3
  •  1
  •   sharptooth    15 年前

    std::vector总是在堆上分配缓冲区。因此,无论在何处分配向量本身,调整大小都只会影响堆。