c++ - 数组与 vector ,内存布局

标签 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;
};

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

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

最佳答案

class A 实例中的每个 vector 实例将包含三个指针 [或两个指针和一个 size_t又名 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); 

在新堆上,很可能是 ab确实相距不远。

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

关于c++ - 数组与 vector ,内存布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28400211/

相关文章:

javascript - 如何设置全局单击监听器以从多个按钮获取值?

javascript - 按顺序合并两个奇数和偶数数组

c++ - 指针 vector 调整大小

c++ - 在类中声明 vector 的大小

c++ - vector 上的运算符 += 失败

c++ - openGL何时以及如何计算F_depth(深度值)

c++ - C++中的动态整数列表

c++ - 在 C++ 中对对象的输入数组进行排序

c++ - 查找操作的时间复杂度

c++ - 我应该使用什么 C++ 库来实现 HTTP 客户端?