在类中安排变量

时间:2013-02-08 20:36:55

标签: c++ class memory

对你们所有人都有疑问。你们中的许多人都会回答“它没有任何区别”,但我有点坚持认为由于问题的措辞有所不同:

'哪个班级使用最少的内存?'

他们要求一个单一的答案 - 必须有一个!我和以前的微软实习生聊天过,他坚持认为没有答案。

也许有人愿意提出他们的想法?

Which class uses the least amount of memory?

class A 
{
    float duration;
    char code;
    int count;
    bool enabled;
};

class B 
{
    float duration;
    int count;
    char code;
    bool enabled;
};

class C
{
    char code;
    int count;
    bool enabled;
    float duration;
};

class D
{
    bool enabled;
    float duration;
    char code;
    int count;
};

2 个答案:

答案 0 :(得分:0)

在MSVC2010上我得到了

A = 16个字节 B = 12个字节 C = 16个字节 D = 16字节

这可能是由于不同类型的对齐。由于char和bool都很小,因此它们共享一个DWORD。

然而,这是编译器和平台无关的。没有什么能阻止编译器实现者使它们具有相同的大小或者使用64字节或其他任何字符。关于这种事情,标准的要求相当宽松。

答案 1 :(得分:0)

回答E,这一个: - )

class E
{
    float duration;
    char code;
    int count;
    bool enabled;
} __attribute__((packed));

对于其他示例,没有什么可以说的,它实际上取决于编译器,arch,......