【问题标题】:How much memory is allocated to an object of this class?为此类的对象分配了多少内存?
【发布时间】:2014-11-29 09:56:26
【问题描述】:

在这个示例类的一个对象中

class example
{
public:
    int x;
}

一个对象将被分配 4 个字节的内存。因为 int 需要 4 个字节。

将分配多少内存给以下类的对象 -

class node
{
public:
    int data;
    node *prev, *next;
};

int 需要四个字节,但是'next' 和'prev' 指针呢?类的一个对象的总大小呢?

【问题讨论】:

  • 你为什么不通过sizeof了解一下?
  • 这个问题太宽泛了,因为基本上每个自然数都可以作为这个问题的答案。该标准没有指定原始类型的大小。它依赖于实现。使用sizeof 并了解填充。

标签: c++ memory-management


【解决方案1】:

对象的总大小为sizeof(int) + 2*sizeof(node*) + 编译器可能在成员之间添加的任何填充。使用 sizeof(node) 是唯一可移植且可靠的方法。

【讨论】:

    【解决方案2】:

    指针大小在 x86 系统上为 4 字节,在 x64 系统上为 8 字节。

    所以node 的总大小是 4 + 4 + 4 或 4 + 8 + 8,在 x86 架构上是 12 字节,在 x64 架构上是 20 字节。

    然而,由于填充,在 x64 架构上,类的实际大小将是 24 字节,因为 x64 架构需要 8 字节对齐。

    正如Oliver Charlesworth所说,你也可以std::cout << sizeof(node) << "\n";,它会告诉你类节点的确切大小

    【讨论】:

    • int 在大多数 x64 编译器上不是 8 字节。此外,这个答案没有考虑填充。
    • 正确的答案是它依赖于实现。试着猜猜系统OP有什么用处。
    • 我说的是 x86 或 x64。在 x64 中添加了填充,在 x86 上大小不变,因为 12 字节是 4 字节对齐的
    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 2012-08-28
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多