如果我将一个向量声明为全局变量,那么向量分配在哪里?

时间:2018-06-14 10:59:40

标签: c++11 global-variables stdvector

每个人

我知道vector是动态分配的,所以它在堆上。但我也知道全局变量既不分配在堆上也不分配堆栈。那么矢量位于哪里呢?

2 个答案:

答案 0 :(得分:6)

如果你有

std::vector<int> my_global_vector;

在全局或命名空间范围内定义(即在任何函数之外),然后对象与所有其他(未初始化的)全局或命名空间变量一起存储在程序的“数据”段中

对象的存储与矢量数据的存储是分开的,它实际上是分配给堆的。

答案 1 :(得分:1)

矢量本身将被放置在程序的静态数据部分中。这不是堆。

但是当向量存储元素时,它将为其数据分配缓冲区。这将在堆上。

请参阅下面的可能实施方案。向量位于左侧 - 它不包含任何元素数据。一旦获得存储数据的请求,它将分配一个缓冲区来存储向量的元素。此缓冲区可以动态增长或缩小。

static data             | heap
------------------------+---------------------
ptr to start    ------> | first element
size                    | second element
                        | ...