有人可以确认以下两者之间的区别:
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
的对象包含两个指向堆上两个随机分配区域的指针吗?
相反,第二类对象将为两个数组分配连续的内存(取决于对象是堆栈还是堆的位置),这将是连续的。这些数组会彼此相邻放置(class不会这样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个整数,并且它们之间可能会有一些填充。除了填充,这些数组将彼此相邻。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句