私には奇妙に見える何かに気づきました。Visual C++ は、既定ではオブジェクトを必要な境界に揃えません。たとえば、long long は 4 バイト境界に整列されますが、__alignof(T) は 8 を返します (私が見る限り、常に型のサイズを返します)。そのため、正しく配置されていないように見えます。例えば
long long a1;
char g;
long long a2;
// alignment check for &a2 fails
if (((uintptr_t)&a2 & (__alignof(long long) - 1)) != 0) // failed
また、ポインターを印刷しようとしました。値&a2
は0x0035F8FC
(3537148
10進数)です。
何か間違っていますか?long long 型の適切に配置されたオブジェクトが必要です。それについて私は何ができますか?Microsoft の拡張機能を使用することもできます__declspec(align())
が、リテラル番号が必要なので、そのようなものを書くことはできません。
__declspec(align(__alignof(long long))) long long object;