考虑在64位,这些结构:数据对齐和继承问题
struct base
{
long a;
};
struct derived : public base
{
long b;
char c;
};
我得到一个大小为24和填充警告,但我不明白为什么。 对我来说,用这种继承的数据排列像
a
b
c
所以一个是在8对齐,B也和c是char和1 对准那么在这里,这是为什么问题大小是24?
考虑在64位,这些结构:数据对齐和继承问题
struct base
{
long a;
};
struct derived : public base
{
long b;
char c;
};
我得到一个大小为24和填充警告,但我不明白为什么。 对我来说,用这种继承的数据排列像
a
b
c
所以一个是在8对齐,B也和c是char和1 对准那么在这里,这是为什么问题大小是24?
有时编译器会选择使用所有元素的字大小来提高运行速度。例如,在GCC中,您可以强制使用
__attribute__((packed))
到结构体定义。你可以学习this GCC documenation。但是,我不确定在使用继承时可以使用什么关于对齐的假设。特别是,如果您使用虚函数,则由于将某些指针添加到结构中,大小可能会改变。
请同时发布您正在使用的编译器和确切的警告消息。 – 2010-11-07 22:28:23
“填充警告”是什么意思? – jalf 2010-11-07 23:50:21