繁体   English   中英

在C ++中,是在堆栈还是堆上的函数中创建向量或映射?

[英]In C++, is created vector or map in a function on stack or heap?

我只是有一个非常简单的问题,但我无法通过Google找到它。

在C ++中,如果我们在函数中创建一个整数,我相信它将在堆栈中。 但是,如果我们创建一个矢量或地图,例如,

vector<int> a

它会堆叠还是堆? 我相信这是一种类对象(类似于java中“new”创建的对象)所以它可能应该在堆上?

vector<int>对象本身是在您选择的存储中创建的:如果将其声明为局部变量,则它将在自动存储中。

但是,向量通常表示为一对指针。 该向量的数据分配在动态存储区域中。

对于std::map<K,V>也是如此:当数据进入动态存储区域时,对象会转到您放置它的位置(自动,静态或动态内存,基于您的声明)。

从C ++ 11开始,您可以将std::array<T>类用于固定大小的集合。 该集合的数据将完全放入您自己放置集合的存储中。 但是,此类集合不可调整大小。

是的,这也将在堆栈上创建。

只有在调用new或malloc时才会在堆上创建变量。

这种类型并不重要,重要的是它是如何创建的。

如果您正在尝试决定是在堆栈上还是动态(在堆上)创建变量,则应考虑对象的生命周期。 如果您只是在其创建的范围内需要它,那么在堆栈上创建它。 否则动态创建它。

任何动态大小的对象的数据都将是堆分配的。 如果它在堆栈上,如果它变得太大,它将冒着溢出和程序崩溃的风险。

对象本身(即动态数组的大小和指向数据在内存中位置的指针)可能会存储在堆栈中。

这里,向量存储在堆上和堆栈上。 意思是,标头在堆栈上,但是当您将元素放入向量中时,这些元素是动态分配的,因此在堆上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM