这是我的班级(无论如何都是数据成员):
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字节的指针?!
只是想 - 显然可能有填充,但为什么这么多!?
答案 0 :(得分:0)
unordered_map类可能包含几个用于其实现的数据成员指针,可能包含一些大小的数据成员。每个都是8个字节,因此您可以轻松地总共达到64个字节。同样适用于集合和地图。
答案 1 :(得分:0)
这门课没有指针。所有这些都是对象,而不是指针。它们反过来可能包含其他对象,指针等。没有理由期望这些成员中的任何一个只占用64位,而不知道它们内部是什么。