我知道向量保证是连续的内存,数组也是如此.那么当我做这样的事情时会发生什么:
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]?
这是否与我有一个结构数组时的情况相同,其中结构体有一个具有可变大小的成员,例如字符串或另一个向量?
内存占用std::vector由两部分组成:
std::vector对象本身的内存(非常小,与大小无关),以及第一种数据在数组中是连续的; 第二种数据是动态分配的,因此它在数组中不是连续的.
这与struct具有灵活数据成员的C不同,因为数据部分std::vector并不总是分配在同一类型的内存中,更不用说与它相邻.矢量本身可以分配在静态,动态或自动存储区域中,而其数据总是在动态区域中.此外,当调整矢量大小时,其数据的存储器可以移动到不同的区域.
每次调用时push_back,std::vector都要检查它是否有足够的动态内存来容纳下一个数据元素.如果内存不足,则向量会分配更大的内存块,并在推送新项目之前将其当前内容移动到那里.