一组向量是完全连续的内存吗?

Dan*_*iel 5 c++ memory arrays

我知道向量保证是连续的内存,数组也是如此.那么当我做这样的事情时会发生什么:

std::vector<uint8_t> my_array[10];
my_array[2].push_back(11);
my_array[2].push_back(7);
Run Code Online (Sandbox Code Playgroud)

记忆会是什么样的?如果两者都需要是连续的,将在阵列中的每个元素后,my_array[2]在每次我做一个时间推着向前一个字节push_back()my_array[2]

这是否与我有一个结构数组时的情况相同,其中结构体有一个具有可变大小的成员,例如字符串或另一个向量?

das*_*ght 6

内存占用std::vector由两部分组成:

  • std::vector对象本身的内存(非常小,与大小无关),以及
  • 向量数据的存储器(取决于向量中的元素数).

第一种数据在数组中是连续的; 第二种数据是动态分配的,因此它在数组中不是连续的.

这与struct具有灵活数据成员的C不同,因为数据部分std::vector并不总是分配在同一类型的内存中,更不用说与它相邻.矢量本身可以分配在静态,动态或自动存储区域中,而其数据总是在动态区域中.此外,当调整矢量大小时,其数据的存储器可以移动到不同的区域.

每次调用时push_back,std::vector都要检查它是否有足够的动态内存来容纳下一个数据元素.如果内存不足,则向量会分配更大的内存块,并在推送新项目之前将其当前内容移动到那里.