コンパイラ フラグを使用して、gcc で同等のものと比較して、msvc で基本クラスと派生クラスの同じメモリ レイアウトを作成する方法はありますか? VS2010を使用してGCC 4.1.1と比較しています
そう
#if define _MSVC
// window
DALIGN(A,B) __declspec(align(A)) B
#else
// GCC
DALIGN(A,B) B __attribute__((aligned(A)))
#endif
class A
{
DALIGN(CVector V,16);
int a;
}
class B : public A
{
int b;
}
A は 16 バイトでアラインされているため、0x20(32) B も 16 バイトでアラインされていますが、GCC では 0x20(32) ですが、msvc では 0x30(48) です。
GCCのようにmsvcにデータを強制的にパックする方法はありますか?
理由: データを作成し、それを異なるプラットフォームのクラスに直接ロードします。本当にいいのは、両方のプラットフォームでまったく同じデータ レイアウトを使用できることです。(はい、両方のプラットフォームでエンディアンは同じです)