std::vector 的元素是否单独存储在内存中 - C++?

问题描述 投票:0回答:2

问题

我尝试打印向量中元素的字节数和内存地址。结果,我看到一个内存地址和一个字节数。向量的元素是否单独存储,如果是,为什么我的代码告诉我向量只有 24 个字节。

我尝试了什么

#include <iostream>
#include <vector>

int main(){
    std::vector<const char *> colour = {"Microsoft", "Apple", "DELL", "Accer", "Lenovo", "hp"};
    std::cout << "VectorSize : " << sizeof(colour) << "\n" << std::endl;
    for(int i = 0; i < colour.size(); i++){
        std::cout << colour[i] << " is " << sizeof(colour[i]) << " byte at " << &colour[i] << "." << std::endl;
    }
}

结果:

VectorSize : 24

Microsoft is 8 byte at 0x27b5a7c6220.
Apple is 8 byte at 0x27b5a7c6228.
DELL is 8 byte at 0x27b5a7c6230.
Accer is 8 byte at 0x27b5a7c6238.
Lenovo is 8 byte at 0x27b5a7c6240.
c++ byte stdvector memory-address
2个回答
0
投票

向量中的数据是动态分配的并存储在另一个内存位置,它不是向量的一部分,并且向量只有一个指向该内存的指针。分配的内存是连续的,因此所有分配的字节在内存中彼此相邻。

在你的情况下,类 std::vector 的大小是 24 字节,内存中其他地方额外分配的内存的大小是 40 字节。因此,总共将在您的计算机内存中分配 64 个字节。


0
投票

这个问题有太多错误了。

sizeof(...)
测量物体的大小。它与
std::vector
具有的元素数量无关。写
colour.size()
来计算。使用向量
sizeof(std::vector) == 24
是因为它包含指向数据的指针、当前元素数量以及分配数据的容量,每个数据在您的架构上占用 8 个字节。不同的实现可能会以不同的方式存储它。

是的,你可以看到指针的位置每次都会增加 8,因为向量的数据是连续存储的。

© www.soinside.com 2019 - 2024. All rights reserved.