【问题标题】:Which one occupies less memory? A pair<type,type> or two 'type' variables哪个占用内存少?一对<type,type> 或两个“类型”变量
【发布时间】:2020-04-28 20:32:35
【问题描述】:

这两种方案哪个占用内存少?

  • short X; short Y;
  • pair&lt;short,short&gt; Coords;

【问题讨论】:

  • 我很确定这两种可能性通常占用相同数量的内存。根据编译器的不同,可能会有一些不常见的情况略有不同。不过,我不会担心这个。
  • 为什么不只是pairarray&lt;pair, 1&gt; 有什么意义?
  • 每种情况生成的指令数量可能存在差异。

标签: c++ arrays memory memory-management


【解决方案1】:

C++2a(GNU)编译器中使用以下代码:

#include <array>
#include <iostream>

using namespace std;

int main() {
  short X;
  array<pair<short, short>, 1> Coords;

  cout << sizeof(X) << endl;
  cout << sizeof(Coords) << endl;
}

好像是一样的,1short是2个字节,array是4个字节。

如果我们尝试同样大小的地址:

cout << sizeof(&X) << endl;
cout << sizeof(&Coords) << endl;

每个 8 个字节。

【讨论】:

  • 鉴于(现在)所有指针 generally have the same size,我不确定是否有必要进行第二次检查。如果有任何明显的差异,那将是由于底层硬件而不是数据类型本身。
  • @Moira,是的,你是对的,但是,仔细检查不会有什么坏处:)
【解决方案2】:

short 的大小取决于平台、编译器和架构,但假设它的大小为 2 字节,则两者都将占用 4 字节的内存。

static_assert(sizeof(std::array<std::pair<short, short>, 1>) == sizeof(short[2]))

因此为什么静态断言在这里不会失败

【讨论】:

  • 语言定义不要求这是真的。它完全取决于编译器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2017-02-06
  • 2021-08-05
相关资源
最近更新 更多