gpt4 book ai didi

c++ - C++ 中的 vector 存储

转载 作者:IT老高 更新时间:2023-10-28 12:30:52 24 4
gpt4 key购买 nike

我希望存储一个大的 d 维点 vector (d 固定且小:<10)。

如果我定义一个 Point作为 vector<int> , 我认为是 vector<Point>将在每个位置存储一个指向 Point 的指针。

但是如果定义一个 Point作为固定大小的对象,例如: std::tuple<int,int,...,int>std::array<int, d> ,程序会将所有点存储在连续内存中还是会保留额外的间接级别?

如果答案是数组避免了额外的间接性,这是否会对扫描 vector<Point> 时的性能(缓存利用局部性)产生很大影响? ?

最佳答案

如果您定义 Point具有连续的数据存储(例如 struct Point { int a; int b; int c; } 或使用 std::array ),然后 std::vector<Point>将存储 Point s 在连续的内存位置,所以你的内存布局将是:

p0.a, p0.b, p0.c, p1.a, p1.b, p1.c, ..., p(N-1).a, p(N-1).b, p(N-1).c

另一方面,如果您定义 Point作为 vector<int> ,然后是 vector<Point>布局为 vector<vector<int>>连续,如vector指针存储到动态分配的内存。所以你有 single Point 的连续性s,但不适用于整个结构。

第一个解决方案比第二个更有效(因为现代 CPU 喜欢访问连续的内存位置)。

关于c++ - C++ 中的 vector 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40302857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com