有人可以确认:
之间的区别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
不是这种情况)?
答案 0 :(得分:2)
class A
实例中的每个向量实例将包含三个指针[或两个指针和一个size_t
又名std::vector::size_type
,或一个指针和两个{ {1}}]。将从堆中分配size_t
中的文件存储空间。 std::vector<int> a, b
和a
的内容远非保证彼此接近。 b
和a
中的每个元素将连续存储,因此除了额外的指针取消引用之外,例如两个解决方案之间的缓存局部性将非常相似。
但是,如果您执行类似
的操作b
在新堆上,A x;
x.a.resize(1000);
x.b.resize(1000);
和a
的确可能不是很远。
在B的例子中,将有两个数组,每个数组足够1000个整数,可能在它们之间有一些填充。除了填充之外,阵列将彼此相邻。