Phe*_*das 140 c++ heap stack stl vector
以下所有陈述都是正确的吗?
vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stack
vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack
vector<Type*> vect; //vect will be on stack and Type* will be on heap.
Run Code Online (Sandbox Code Playgroud)
如何存储在内部分配Type的vector或任何其他STL容器?
Fre*_*Foo 201
vector<Type> vect;
Run Code Online (Sandbox Code Playgroud)
将vector在堆栈上分配,即头信息,但在免费商店("堆")上分配元素.
vector<Type> *vect = new vector<Type>;
Run Code Online (Sandbox Code Playgroud)
在免费商店分配所有东西.
vector<Type*> vect;
Run Code Online (Sandbox Code Playgroud)
将分配vector堆栈和免费商店上的一堆指针,但这些点由你如何使用它们决定(你可以将元素0指向免费商店,将元素1指向堆栈,比如说).
Fle*_*exo 23
假设一个实际上有堆栈和堆的实现(标准C++不要求有这样的东西),唯一真正的语句是最后一个.
vector<Type> vect;
//allocates vect on stack and each of the Type (using std::allocator) also will be on the stack
Run Code Online (Sandbox Code Playgroud)
这是真的,除了最后一部分(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);
}
Run Code Online (Sandbox Code Playgroud)
同样:
vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack
Run Code Online (Sandbox Code Playgroud)
除了最后一部分,它是真的,有一个类似的反例:
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);
}
Run Code Online (Sandbox Code Playgroud)
对于:
vector<Type*> vect; //vect will be on stack and Type* will be on heap.
Run Code Online (Sandbox Code Playgroud)
这是事实,但请注意,Type*指针将在堆上,但Type它们指向的实例不必是:
int main() {
vector<Type*> bar;
Type foo;
bar.push_back(&foo);
}
Run Code Online (Sandbox Code Playgroud)
jpa*_*cek 22
Run Code Online (Sandbox Code Playgroud)vector<Type> vect; //allocates vect on stack and each of the Type (using std::allocator) also will be on the stack
不,vect将在堆栈上,但它在内部用于存储项目的数组将在堆上.这些项目将驻留在该数组中.
Run Code Online (Sandbox Code Playgroud)vector<Type> *vect = new vector<Type>; //allocates vect on heap and each of the Type will be allocated on stack
不.与上面相同,只是vector类将在堆上.
Run Code Online (Sandbox Code Playgroud)vector<Type*> vect; //vect will be on stack and Type* will be on heap.
vect将在堆栈上,它的项目(指针Type)将在堆上,你无法分辨Type指针指向的位置.可能在堆栈上,可能在堆上,可能在全局数据中,可能无处(即NULL指针).
实际上,实现可以完全在堆栈上存储一些向量(通常是小尺寸的).不是我知道任何这样的实现,但它可以.
矢量有一个内部allocator负责分配/解除分配heap内存vector element。因此,无论您如何创建向量,它element总是分配在heap. 至于矢量的元数据,这取决于您创建它的方式。