【问题标题】:How many bytes does an empty queue take?一个空队列需要多少字节?
【发布时间】:2013-02-20 23:39:44
【问题描述】:

一个空队列、一个空向量等占用多少字节?

【问题讨论】:

  • 取决于实现。
  • 它的实现已定义。
  • 并且取决于处理器架构。
  • 使用sizeof 找出答案。
  • @NikBougalis:我认为它甚至不是官方的 ID(这需要实现文档)。更有可能未指明。

标签: c++ memory queue


【解决方案1】:

这是一个实现细节——标准并没有说太多。我们大概可以算出一个最小值:

vector 将(至少)有一个指向数据本身的指针、一个实际大小和一个容量。所以至少是整数大小的 3 倍。显然,大小和指针可能是 64 位,在这种情况下,它是 3 乘以 64 位 = 24 字节。但是,如果不查看实际实现,就无法说大小是否为 64 位。

queue 可能类似。

你当然可以sizeof(vector<int>) 自己看看。但不能保证在不同的架构上是相同的。

【讨论】:

  • 考虑一下,std::string 应该有同样的推理:它当然有数据本身、大小和容量。然而,对于 Windows 中的 g++ 4.7.2,std::string 是 4 个字节,即单个指针的大小。由于它持有的指针是非零的,它使用的存储实际上可能比你的最小值多,但关键是对于一个空字符串,内部指针 可能 是一个空指针,在这种情况下实例只会使用单个指针的空间。
【解决方案2】:

这个问题没有一般的答案。这完全取决于实现。

【讨论】:

    【解决方案3】:

    一般来说,常见的实现是基于数组或链表。在这种情况下,它需要一个指向队列开头的指针和长度(或指向结尾的指针)。这反过来意味着它将占用 sizeof(void*)*2 个字节。在 x86_64 上它将等于 16 个字节。链表也有两个指针。但是不同的实现可能需要更多或更少。例如,可以使用 24 位基址和 8 位存储大小,导致只使用 4 个字节来记账。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2017-08-12
      • 1970-01-01
      相关资源
      最近更新 更多