考慮在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