2 つの DLL を別々にコンパイルしました。1 つは Visual Studio 2008 からコンパイルされたもので、もう 1 つは matlab からコンパイルされた mex ファイルです。
どちらの DLL にも、インクルードするヘッダー ファイルがあります。1 つの DLL で構造体を取得するsizeof()
と、48 が返され、もう 1 つの DLL では 64 が返されます。/Zp
スイッチを確認したところ、両方のコンパイルで に設定されてい/Zp8
ます。
構造体のサイズに影響を与える可能性のある他のコンパイラ スイッチは何ですか?
構造体は、継承も仮想関数もない単純な POCO です。
編集
構造体は次のようになります。
class LIBSPEC SGeometry
{
public:
std::vector<IGeometry> m_i;
uint N;
uint n_im, n_s;
};
デバッグでsizeof()
はどちらの場合も 56 を返します。リリースでは、mex コンパイルでは 48、VS では 64
です。mex をコンパイルするときに使用する正確なコンパイラ オプションを matlab に伝えることができるので、そうではありません。
編集
offsetof で確認したところ、違いは のサイズにあることがわかりましたstd::vector
。1 つの DLL では 32 で、もう 1 つの DLL では 48
です。どちらの DLL も x64 です。