C++における構造体タイプ(またはクラスタイプ)のサイズ


まず,次の構造体を観察し,sizeof()関数を用いてこのタイプの大きさを求めた.
struct TS
{
  int ma;
  double mb;
  char mc;
};

このタイプのサイズは、4バイト+8バイト+1バイト=13バイトと考える人が多いかもしれません.
しかし、実際には24バイトが出力される.
size_t len;
	len = sizeof(TS );//      
	cout<

なぜかあまり考えないで、次の構造体を見て、その構造体のタイプの大きさを求めます.
struct TC
{
  double mb;
  int ma;
  char mc;
};

これまでこの問題を考えたことがない場合は、構造体TCと構造体TSに違いはないと思うかもしれませんが、TCタイプのサイズはTSと同じ24バイトであるべきですが、実際にはTCタイプは16バイトです.
size_t len;
	len = sizeof(TC );//      
	cout<

この結果を見て、C++の構造体タイプまたはクラスタイプのメモリ割り当て法則は、実際には1つの構造体では、コンパイラがストレージ空間を割り当てるときに、常にその構造体のすべてのメンバーのメンバータイプのストレージ空間の最大値を基本単位としてスペースを割り当てていることが分かったかもしれません.例えば、TSにおいて記憶領域が最も大きいメンバタイプはdoubleタイプであり、そのサイズ値は8であるため、8を基本単位として空間を割り当て、まずmaに8バイトを割り当て、maを記憶した後に4バイトを増やすが、mbには確かに8バイトが必要であるため、mbに8ワード節を割り当て、最後にmcに8バイトを割り当てる必要があるため、合計24バイトである.TCではまず8バイトを割り当てて、ちょうど十分で、それからmaに8バイトを割り当てて、4バイトを多く出しますが、mcは1バイトしか必要ありません.だから、多く出た4バイトはもうmcに十分です.だから、これ以上割り当てる必要はありません.全部で16バイトです.