先不多说,来看段代码:
struct state_data
{
unsigned shared_count:11,
shared_waiting:11,
exclusive:1,
upgrade:1,
exclusive_waiting:7,
exclusive_waiting_blocked:1;
friend bool operator==(state_data const& lhs,state_data const& rhs)
{
return *reinterpret_cast<unsigned const*>(&lhs)==*reinterpret_cast<unsigned const*>(&rhs);
}
};
可以看出,在struct state_data中所有的成员也只占32个字节,:x 代表这个成员占x个字节,而在对比的时候即重载operator ==,只需要对比从struct poiter开始的32个字节即可,这个技巧即节省了内存空间,又很优雅。