gpt4 book ai didi

c++ - MSVC : what compiler switches affect the size of structs?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:25 25 4
gpt4 key购买 nike

我有两个单独编译的DLL,一个是从Visual Studio 2008编译的,一个是从matlab编译的mex文件。
两个 DLL 都包含一个头文件。当我在一个 DLL 中采用 sizeof() 结构时,它返回 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。

最佳答案

好吧,这可能是有史以来最晦涩的事情了。
事实证明,matlab 将 /D_SECURE_SCL=0 添加到编译中,它禁用了名为 'secure iterators' 的东西。
这反过来导致 std::vector

的大小相差 16 个字节

关于c++ - MSVC : what compiler switches affect the size of structs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com