c++ - 指向指针 vector 的指针的内存消耗

标签 c++ pointers

我知道指针的大小是固定的(不是它指向的数据的大小)。鉴于此,假设我在全局范围内有一个数据 vector ,并且我声明了一个指向指向部分/所有全局数据的指针 vector 的指针,这将额外使用多少内存(RAM)?我在这里完全不知所措,当然会很感激一些想法/建议。我希望额外的内存消耗只是 vector 大小乘以指针的固定大小(比如 8 个字节),而不管数据的复杂性如何;因为它指向的数据存在于全局范围内(即,没有分配新数据;希望我已经清楚地解释了我的想法)。

表达我的问题的一些伪代码如下所示:

std::vector<data> global_data;
std::vector<data*>* my_data = new std::vector<data*>();  //-Is this even valid? 
//-Now populate the vector with pointers to data in global_data
for(int i=0; i<global_data.size(); ++i) {
   my_data->push_back(&global_data[i]);
}

那么我的问题是 RAM 中有多少额外的内存(即超过创建 global_data 时已经使用的内存)被 m_data 用完了?

最佳答案

my_data会占用sizeof(std::vector<data*>*)字节,且不超过 sizeof(void*) .

*my_data会占用sizeof(std::vector<data*>) ,可以低至 3 * sizeof(data**) ,即不超过 3 * sizeof(void*) .

*my_data会管理sizeof(data*) * my_data->capacity()字节的动态内存。


我非常怀疑这些信息在实践中是否有用。

关于c++ - 指向指针 vector 的指针的内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9796600/

相关文章:

c++ - visual studio 2012 中的 float 和 double 类型

python - 没有 DLL 的 SWIG + Python

c - 将数组传递给函数时使用的正确模式

c - 使用指向结构的指针在设备内存中设置一个数组;在库达

c# - 微软 Visual Studio : Debugging multiple projects at once (executable that accesses functions in DLL + the DLL used by executable)

c++ - 读取二维数组作为 C++ 函数中的参数?

c# - KeyDown 上的 Windows 应用商店应用 OEM key

c++ - 使用指针在数组中首次出现元素 (C++)

c - 在 C : Is void* a type?

c - 我对 %p 说明符感到困惑