模板类的大小

时间:2014-07-09 08:16:56

标签: c++ class

我遇到类似这样的问题:

template <typename T1, typename T2>
class X {
  T1 a;
  T2 b;
};

int main() {
 std::cout << sizeof(X<int,char>) << std::endl;
 std::cout << sizeof(X<int,int>) << std::endl;
 std::cout << sizeof(X<char,char>) << std::endl;
};

gcc 4.4.7的输出是

8
8
2

我不明白为什么第一个结果是8.对我来说它应该是6.同样是使用double / int模板args(给出16,而不是12)。我还检查过,这种行为与我是使用模板类还是普通类只有2个成员int和char无关。

1 个答案:

答案 0 :(得分:1)

那是因为structure alignment。通常,编译器会尝试将对象(通过填充)与特定字节边界对齐,4-byte8-byte边界都很常见。

This pageC中讨论了相同的想法,但它在C++中虽然不完全相同,但它是相似的。