我遇到类似这样的问题:
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无关。
答案 0 :(得分:1)
那是因为structure alignment。通常,编译器会尝试将对象(通过填充)与特定字节边界对齐,4-byte
和8-byte
边界都很常见。
This page在C
中讨论了相同的想法,但它在C++
中虽然不完全相同,但它是相似的。