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



所有人。

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

如果你有

std::vector<int> my_global_vector;

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

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

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

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

有关可能的实现,请参见下文。向量在左侧 - 它不包含任何元素数据。一旦它收到存储数据的请求,它将分配一个缓冲区来存储向量的元素。此缓冲区可以动态增长或收缩。

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

相关内容

  • 没有找到相关文章

最新更新