为了账号安全,请及时绑定邮箱和手机立即绑定

分配向量后,它们是否使用堆或堆栈上的内存?

分配向量后,它们是否使用堆或堆栈上的内存?

C++
沧海一幻觉 2019-11-05 10:36:42
以下所有陈述均正确吗?vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stackvector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stackvector<Type*> vect; //vect will be on stack and Type* will be on heap. 如何Type在一个vector或任何其他STL容器中为内部分配内存?
查看完整描述

3 回答

?
当年话下

TA贡献1890条经验 获得超9个赞

vector<Type> vect;

将vector在堆栈上分配,即标头信息,但在免费存储(“堆”)上分配元素。


vector<Type> *vect = new vector<Type>;

在免费商店中分配所有东西。


vector<Type*> vect;

将vector在堆栈上分配,并在免费存储区上分配一堆指针,但是这些指针的位置由使用方式决定(例如,您可以将元素0指向免费存储区,将元素1指向堆栈)。


查看完整回答
反对 回复 2019-11-05
?
慕斯王

TA贡献1864条经验 获得超2个赞

假设实际上有一个堆栈和一个堆的实现(标准C ++不需要具有此类东西),则唯一正确的语句是最后一个语句。


vector<Type> vect;

//allocates vect on stack and each of the Type (using std::allocator) also will be on the stack

这是事实,除了最后一部分(Type不会在堆栈上)。想像:


  void foo(vector<Type>& vec) {

     // Can't be on stack - how would the stack "expand"

     // to make the extra space required between main and foo?

     vec.push_back(Type());

  }


  int main() {

    vector<Type> bar;

    foo(bar);

  }

同样地:


 vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack

除最后一部分外为真,并带有类似的反例:


  void foo(vector<Type> *vec) {

     // Can't be on stack - how would the stack "expand"

     // to make the extra space required between main and foo?

     vec->push_back(Type());

  }


  int main() {

    vector<Type> *bar = new vector<Type>;

    foo(bar);

  }

对于:


vector<Type*> vect; //vect will be on stack and Type* will be on heap. 

的确如此,但是请注意,Type*指针将位于堆上,但Type它们指向的实例不必是:


  int main() {

    vector<Type*> bar;

    Type foo;

    bar.push_back(&foo);

  }


查看完整回答
反对 回复 2019-11-05
?
皈依舞

TA贡献1851条经验 获得超3个赞

vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stack

不,vect将在堆栈上,但是内部用于存储项目的数组将在堆上。这些项目将驻留在该数组中。


vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack

否。与上述相同,除了vector该类也将在堆上。


vector<Type*> vect; //vect will be on stack and Type* will be on heap. 

vect将位于堆栈上,其项(指向的指针Type)将位于堆上,并且您无法确定Type指针所指向的s在哪里。可能在堆栈上,可能在堆上,可能在全局数据中,可能在任何地方(即NULL指针)。


顺便说一句,该实现实际上可以将某些矢量(通常为小尺寸)完全存储在堆栈中。我不是知道任何这样的实现,但是可以。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 740 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信