如果std :: vector和朋友自我调整大小,这是否意味着如果我声明一个这样的向量:
std::vector<string> myvec;
然后它将使用更多堆栈调整大小,而:
std::vector<string> *myvec = new std::vector<string>();
会使用更多堆调整大小吗?
答案 0 :(得分:24)
向量在堆内部分配。
对于基于堆栈的bector,你在堆栈中唯一支付的是几个字节,内部缓冲区将始终从堆中分配。
当你做一个vec = new vector()时,你会分配一小部分,这可能不是很好。
答案 1 :(得分:9)
在第一种情况下,您将在堆栈上创建向量。这并不意味着所有向量内部对象也在堆栈上。实际上,vector仍然会分配仅在堆上保存对象所需的内存。这是因为,要在堆栈上分配,您应该知道要创建多少个对象。但是这些信息不可用,因此唯一剩下的选择是从堆中为包含的对象分配内存。
答案 2 :(得分:1)
std :: vector总是在堆上分配缓冲区。因此,无论向量本身在何处分配大小,它都只会影响堆。