1.问题分析
string为basic_string的typedef,对于basic_string我们看到里面:
template<typename _CharT, typename _Traits,.../ sizeof(_CharT) };
union
{
_CharT _M_local_buf[_S_local_capacity + 1]...字节.因此,上述我们可以知道内存结构为
8字节内存指针
8字节字符串长度
匿名的enum,并没有用一个枚举去声明一个名,不占内存.
16字节联合体
故string内部按8字节对齐,共占32字节大小.
2...我们知道是8字节对齐,据此得出A为8字节对齐.
int+long为12,需要填补到8的倍数边界,故为16,而string为32,不用变,因此最后为16+32=48..../ sizeof(char) }; // 这里不算
S s; // 这里算大小
union // 算大小
{
char _M_local_buf[15+ 1]