【问题标题】:How much memory do 1000 shared pointers take?1000 个共享指针占用多少内存?
【发布时间】:2019-09-25 01:24:50
【问题描述】:
  1. 1000 个共享指针占用(例如)多少内存?
  2. 是 16 x 1000 字节吗?
  3. 32 位和 64 位系统有区别吗?

【问题讨论】:

  • 您是否包括指向的对象以及与每个对象相关的开销?此外,共享指针指向什么
  • @Caleth 不。只有指针本身。我不认为指针的内存大小不会根据指向不同的对象而改变,对吧?
  • std::shared_ptr 不是类型,它没有大小。 sizeof(std::shared_ptr<int>) 没有要求等于 sizeof(std::shared_ptr<void>),但是我想不出有什么理由让它们不同
  • 你可以用一个简单的cout << sizeof(Whatever) << " " << sizeof(Whatever[100]) << "\n"; 自己测试一下,shared_ptr 很可能会持有一个或多个指针,所以它的大小取决于sizeof (void*),这意味着你会得到不同的结果 32 和 64 位

标签: c++ c++11 shared-ptr smart-pointers


【解决方案1】:

在典型实现中,std::shared_ptr holds only two pointers

所以 1000 个共享指针占用了 1000 * 2 * sizeof(pointer) 字节的内存。

  • 在遵循 ILP32 数据模型的所有 32 位系统上,指针的大小为 4 字节。
  • 在遵循 LP64 数据模型(大多数 Unix 和类 Unix 系统)或 LLP64 数据模型(Microsoft Windows x86-64)的 64 位系统上,指针的大小为 8 个字节。

注意:控制块的大小(取决于实现)和共享指针共享所有权的对象的大小不在此范围内。

【讨论】:

  • 为此添加了注释。谢谢。
  • @Baran:这能回答你的问题吗?
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2014-06-25
相关资源
最近更新 更多