繁体   English   中英

数组与向量,内存布局

[英]Array vs vector, memory layout

有人可以确认以下两者之间的区别:

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不会这样)?

class A的实例中的每个矢量实例都将包含三个指针[或两个指针和一个size_t aka std::vector::size_type或一个指针和两个size_t ]。 std::vector<int> a, b中的元素存储将从堆中分配。 ab内容不能保证彼此接近。 ab每个元素将连续存储,因此除了额外的指针取消引用之外,例如,两种解决方案之间的缓存局部性将非常相似。

但是,如果您做类似的事情

A x;
x.a.resize(1000);
x.b.resize(1000); 

在新鲜的堆上, ab确实相距不远。

在B的实例中,将有两个数组,每个数组足以容纳1000个整数,并且它们之间可能有填充。 除了填充,这些数组将彼此相邻。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM