ドキュメンテーションの書き方が悪いか、外国語としての私の英語力がそれに見合っていないかのどちらかです。
// make a nice 16 align macro
#ifndef ALIGN16
#define ALIGN16 __declspec(align(16))
#endif
// align the structure
struct ALIGN16 CB {
ALIGN16 bool m1; // and
ALIGN16 int m2; // align
ALIGN16 int m3; // each
ALIGN16 short m4; // element
};
// now it performs as expected
printf("sizeof(CB) %d\r\n", sizeof(CB));
CB vCb;
printf("CB: %p, %%%d\r\n", &vCb, (UINT_PTR)&vCb % 16);
printf("CB.m1: %p, %%%d\r\n", &vCb.m1, (UINT_PTR)&vCb.m1 % 16);
printf("CB.m2: %p, %%%d\r\n", &vCb.m2, (UINT_PTR)&vCb.m2 % 16);
printf("CB.m3: %p, %%%d\r\n", &vCb.m3, (UINT_PTR)&vCb.m3 % 16);
printf("CB.m4: %p, %%%d\r\n", &vCb.m4, (UINT_PTR)&vCb.m4 % 16);
__declspec(align(#))
は構造体と のアラインメントにのみ影響し、その中sizeof()
の各メンバーには影響しません。各プロパティを整列させたい場合は、メンバー レベルで整列を指定する必要があります。
また、最初は astruct-level __declspec(align())
がそれに影響し、そのメンバーであると想定していましたが、そうではありません。したがって、メンバーごとの調整が必要な場合は、具体的にする必要があります。