在C++中,是在堆栈或堆上的函数中创建的向量或映射
In C++, is created vector or map in a function on stack or heap?
我有一个非常简单的问题,但我无法通过谷歌找到。
在C++中,如果我们在函数中创建一个整数,我相信它会在堆栈中。但如果我们创建一个矢量或地图,例如
vector<int> a
它会堆起来还是堆起来?我相信这是一种类对象(类似于java中"new"创建的对象),所以它可能应该在堆上?
vector<int>
对象本身是在您选择的存储中创建的:如果您将其声明为局部变量,则它将在自动存储中。
然而,向量通常表示为一对指针;在动态存储区域中分配该向量的数据。
std::map<K,V>
也是如此:当数据进入动态存储区时,对象会放在你放的任何地方(根据你的声明,自动、静态或动态内存)。
从C++11开始,您可以将std::array<T>
类用于固定大小的集合。此集合的数据将完全存储在您放置集合本身的存储器中。但是,这样的集合不可调整大小。
任何动态大小的对象的数据都将被堆分配。如果它在堆栈上,那么如果它变得太大,就会有溢出和程序崩溃的风险。
对象本身(即动态数组的大小和指向数据在内存中位置的指针)可能会存储在堆栈上。
是的,这也将在堆栈上创建。
只有在调用new或malloc时,才会在堆上创建变量。
类型其实并不重要,重要的是它是如何创建的。
如果您试图决定是在堆栈上还是动态地(在堆上)创建可变对象,则应该考虑对象的生存期。如果您只是在创建它的范围内需要它,那么就在堆栈上创建它。否则将动态创建它。
这里,向量存储在堆和堆栈上。也就是说,标头在堆栈上,但当您将元素放入向量中时,这些元素会被动态分配,因此在堆上。
相关文章:
- 如何创建函数管道,以便函数一个接一个地运行?
- 如何创建一个对象创建函数,该函数将由与其关联的名称调用?
- 创建函数变体向量时"No matching function for call"错误
- C++ 在映射中创建函数指针向量
- 以编程方式在 C++ 中创建函数
- 如何创建函数可能使用自定义可比C++?
- 编译错误,未创建函数/方法! 对于 brms 模型
- Cython 创建 C 函数别名
- 创建函数指针数组
- 动态创建函数并获取指针
- 混合模板类型的模板参数包(std::使用可选参数重新创建函数)
- 如何创建函数原型命名空间
- 无法创建函数数组
- 在为STD模板函数创建函数对象时,还要还原样板
- 是否可以在C++中声明基类,以便只能通过创建函数创建从它派生的类
- 将原始指针移动到已创建函数中的下一个字符
- qjsonObject如何创建函数
- 尝试在别人的代码中C++创建函数(A* 搜索)
- 在C++中通过模板包重新创建函数签名和调用
- 创建函数时接收"expected unqualified-id"