如何用默认构造函数在内存空间中不覆盖C ++向量?

问题描述 投票:0回答:1

这更多是理论上的问题,而不是问题。

据我了解,std :: vector在添加,删除或构造时将动态调整大小/重新分配内存。

我有一些关于向量如何在最低级别工作的问题,使用下面的代码示例

  1. 是什么防止下面的示例覆盖string1的存储空间?

  2. 矢量是否以与数组相同的方式连续?

  3. 如果向量需要一个可用的总内存,但是不连续,会分散内存空间吗?

#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);
    }
}
c++ memory vector theory
1个回答
1
投票

这些答案如何?

  1. 操作系统(或正在处理您的内存分配的任何人)。通常,向量和字符串的默认分配器会调用OS来在堆上分配内存。操作系统确保这些不会冲突。

  2. 是,标准保证向量的连续存储。

  3. 否,它将请求所需的大小块,并且操作系统(或任何分配器)将提供一个或失败。碎片整理是一项操作系统任务。

© www.soinside.com 2019 - 2024. All rights reserved.