我有一个包含大矢量的类
class myClass
{
public:
myClass(int size)
private:
vector<int> myVector;
}
myClass::myClass(int size)
{
myvector = vector<int>(size);
}
如果我调用myClass o(100000)
,则在堆栈上创建对象。但是,堆栈上到底是什么?我从堆栈中分配了多少内存?矢量的内容应该在堆上分配,对吧?
有人可以向我解释堆栈上究竟是什么以及堆上的内容是什么?
答案 0 :(得分:6)
基本上,您可以将std::vector
概括为
template<typename T>
struct vector {
T* data;
size_t size;
size_t capacity;
};
个别实施可能会有所不同,但它们通常看起来像上面那样。
所以它只是在堆栈上创建的这个向量容器,将从堆中提取将保存数据的数组。
---编辑---
对于给定的堆栈变量,您可以使用sizeof
运算符来确定它需要多少堆栈空间,例如
myClass o(100000);
std::cout << "o's size is " << sizeof(o) << "\n";