这更多是理论上的问题,而不是问题。
据我了解,std :: vector在添加,删除或构造时将动态调整大小/重新分配内存。
我有一些关于向量如何在最低级别工作的问题,使用下面的代码示例
是什么防止下面的示例覆盖string1
的存储空间?
矢量是否以与数组相同的方式连续?
如果向量需要一个可用的总内存,但是不连续,会分散内存空间吗?
#include <vector>
using namespace std;
int main(){
string string1 = "Some really large string";
/* A bunch of other random declarations take place
...
*/
vector<int> vector1;
for(int i = 0; i < 10; i++)
{
vector1.push_back(i);
}
}
这些答案如何?
操作系统(或正在处理您的内存分配的任何人)。通常,向量和字符串的默认分配器会调用OS来在堆上分配内存。操作系统确保这些不会冲突。
是,标准保证向量的连续存储。
否,它将请求所需的大小块,并且操作系统(或任何分配器)将提供一个或失败。碎片整理是一项操作系统任务。