类数据成员内存布局显示超大指针大小?

时间:2014-04-11 23:53:48

标签: c++ class compiler-construction

这是我的班级(无论如何都是数据成员):

class X{

public:
    std::unordered_map<std::string, boost::shared_ptr<Y> > a;
    std::unordered_map<double, long> b;
    std::set<double> c;
    std::map<double, long> d;
    std::unordered_map<std::string, long> e;
    std::string f;
    std::mutex g;
};

这是MSVC 2012编译器生成的布局:

1>  class X size(264):
1>      +---
1>   0  |  a
1>  64  |  b
1>  128 |  c
1>  144 |  d
1>  160 |  e
1>  224 |  f
1>  256 |  g
1>      +---

我不明白为什么容器数据成员的偏差之间存在如此大的差距?地址以字节为单位 - 所以我的unordered_map<double, long>数据成员有一个64字节的指针?!

只是想 - 显然可能有填充,但为什么这么多!?

2 个答案:

答案 0 :(得分:0)

unordered_map类可能包含几个用于其实现的数据成员指针,可能包含一些大小的数据成员。每个都是8个字节,因此您可以轻松地总共达到64个字节。同样适用于集合和地图。

答案 1 :(得分:0)

这门课没有指针。所有这些都是对象,而不是指针。它们反过来可能包含其他对象,指针等。没有理由期望这些成员中的任何一个只占用64位,而不知道它们内部是什么。