我有两个分别编译的 DLL,一个是从 Visual Studio 2008 编译的,一个是从 matlab 编译的 mex 文件。
两个 DLL 都有一个包含的头文件。当我sizeof()
在一个 DLL 中获取结构时,它返回 48,在另一个 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。
我可以告诉 matlab 在编译 mex 时要使用的确切编译器选项,所以它不是。
编辑
用offsetof检查后发现差异在于std::vector
. 在一个 dll 中是 32,在另一个中是 48。
两个 dll 都是 x64。