MSVC:什么编译器开关会影响结构的大小?

sho*_*osh 4 c++ struct sizeof alignment visual-c++

我有两个单独编译的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;
};
Run Code Online (Sandbox Code Playgroud)

在调试中,它sizeof()在发行版中返回56,在mex编译中它是48,来自VS它是64.
我可以告诉matlab在编译mex时使用的确切编译器选项,所以它不是它.


编辑

用offsetof检查后,结果发现差异在于std::vector.在一个dll中它是32,而在另一个
dll中它们是48. 这两个dll都是x64.

sho*_*osh 5

好的,所以这可能是有史以来最晦涩的事情.
事实证明,matlab添加/D_SECURE_SCL=0到禁用称为"安全迭代器"的编译中,
这反过来会导致16字节大小的差异std::vector