数组与矢量,内存布局

时间:2015-02-08 22:39:23

标签: c++ arrays vector

有人可以确认:

之间的区别
class A{
    public:
        std::vector<int> a;
        std::vector<int> b;
};

class B{
    public:
        std::array<int, 1000> a;
        std::array<int, 1000> b;
};

A该对象包含指向堆上两个随机分配区域的两个指针?

相比之下,对象将为两个数组分配连续内存(取决于对象的堆栈或堆的位置),这将是连续的。这些数组将彼此相邻(类A不是这种情况)?

1 个答案:

答案 0 :(得分:2)

class A实例中的每个向量实例将包含三个指针[或两个指针和一个size_t又名std::vector::size_type,或一个指针和两个{ {1}}]。将从堆中分配size_t中的文件存储空间。 std::vector<int> a, ba的内容远非保证彼此接近。 ba中的每个元素将连续存储,因此除了额外的指针取消引用之外,例如两个解决方案之间的缓存局部性将非常相似。

但是,如果您执行类似

的操作
b

在新堆上,A x; x.a.resize(1000); x.b.resize(1000); a的确可能不是很远。

在B的例子中,将有两个数组,每个数组足够1000个整数,可能在它们之间有一些填充。除了填充之外,阵列将彼此相邻。