【发布时间】:2019-06-18 13:41:29
【问题描述】:
我知道以下情况的区别:
case 1: int a[10];
对于情况 1,数组的内存分配在堆栈上。
case 2: int *a = new int[10];
对于情况 2,在堆上分配内存并返回一个指针。
但是下面两个声明有什么区别, 至于向量内存总是在堆上分配的
vector<int> v1;
vector<int> *v2 = new vector<int>();
【问题讨论】:
-
和其他类型没什么区别
-
@KABoissonneault,在数组中,区别是在一种情况下在堆栈上分配内存,在另一种情况下在堆上分配内存,但在向量内存中总是在堆上分配,那么有什么区别?
-
无论 std::vector
包含多少元素或元素类型,在 ubuntu,g++ v7.3 上,“sizeof(std::vector )”报告 24 字节.因此:v1 占用 24 字节的自动内存,加上动态内存中的 n 字节来保存元素。 v2占用8字节的自动内存(一个指针),并使用24字节的动态内存来保存向量对象,并使用动态内存中的n字节来保存元素。 -
@Frank 不确定这实际上是重复的,因为两者之间的差异不仅仅是对象的内存来自哪里。对象的生命周期也存在差异,您引用的发布是针对 C 的,其中这是 C++,向量可以具有特定的内存分配器。
标签: c++ dynamic-memory-allocation stdvector static-memory-allocation