[英]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
中的元素存储将从堆中分配。 a
和b
内容不能保证彼此接近。 a
和b
每个元素将连续存储,因此除了额外的指针取消引用之外,例如,两种解决方案之间的缓存局部性将非常相似。
但是,如果您做类似的事情
A x;
x.a.resize(1000);
x.b.resize(1000);
在新鲜的堆上, a
和b
确实相距不远。
在B的实例中,将有两个数组,每个数组足以容纳1000个整数,并且它们之间可能有填充。 除了填充,这些数组将彼此相邻。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.