gpt4 book ai didi

c++ - 为什么 C++ 中的 3D vector 在 RAM 中比 1D vector 大

转载 作者:太空狗 更新时间:2023-10-29 20:40:13 25 4
gpt4 key购买 nike

我偶然发现一个 STL vector 定义如下:

vector < float > test;
test.resize(10000 * 10000 * 5);

在 RAM 中使用的空间比以下定义少得多:

std::vector<std::vector<std::vector< float > > > test;

test.resize(10000);
for(int i = 0;i < 10000;i++)
{
test[i].resize(10000);
for(int j = 0;j < 10000;j++)
{
test[i][j].resize(5);
}
}

线性 vector 法(上图)使用正确数量的 RAM (2Gb),正如手动计算的那样。所以我的问题是,为什么 3D vector 使用的 RAM 比线性 vector 多得多,我发现在这个例子中它要多得多(大约 4Gb)。

最佳答案

在前一种情况下你有:

sizeof(vector<float>)                  // outermost vector
+ 10000 * 10000 * 5 * sizeof(float) // xyz space

在后者中你有:

sizeof(vector<vector<vector<float>>>)      // outermost vector
+ 10000 * sizeof(vector<vector<float>>) // x axis
+ 10000 * 10000 * sizeof(vector<float>) // xy plane
+ 10000 * 10000 * 5 * sizeof<float> // xyz space

sizeof(vector<T>) 的典型值对于任何 T3 * sizeof(T*) ,我相信,这也是标准允许的最小值——容量必须与大小不同,因为 reserve()必须更改 capacity() 的值但不是 size() .

关于c++ - 为什么 C++ 中的 3D vector 在 RAM 中比 1D vector 大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24961160/

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