c++structメモリの位置合わせメモリの消費量を減らす


バイト整列の原則
システムのデフォルトの位置合わせでは、この構造体変数アドレスに対する各メンバーのオフセットは、そのメンバータイプが占めるバイトの整数倍であり、最終的な占有バイト数は、メンバータイプの最大占有バイト数の整数倍である.
 
struct struct1
{
    char a;
    int b;
    short c;
}Struct1;

//この構造体の整列値は最大sizeで計算し、整列値は4バイト(intのsize)//最初の変数aアドレスは0から1バイト占有
//bは4バイトで、先頭アドレスは自分のサイズ(intは4バイト)の倍数(0,4,8,12...)である必要があります.3バイトを揃え、4バイト目から//structが1+3+4=8バイト=>1__、1111
//cは2バイトを占め、先頭アドレスは前の8から、ちょうど2の倍数//現在structは1+3+4+2=10バイト=>1__、1111,11
//最後に忘れないでください.structの位置合わせ値は4なので、後で2バイト12を揃えると4の倍数になります.//structは1+3+4+2=12バイト=>1__,1111,11,_ _
//sizeof(Struct1) = 12
//では、スペースを節約するにはどうすればいいのでしょうか
struct struct1
{
    int b;
    short c;
    char a;
}Struct1;

//この構造体の整列値は最大sizeで計算し、整列値は4バイト(intのsize)
//bは4バイト=>1111、//cは2バイト、先頭アドレスは前の4から、ちょうど2の倍数=>1111,11、//現在structは4+2=6バイトを占めています
//aは1バイト、アドレスは6から1の倍数=>1111,11,1//現在structは4+2+1=7バイト
//最後に、structの位置合わせ値は4なので、あとで1バイト8を揃えると4の倍数になります.=>1111,11,1,_//sizeof(Struct1) = 8