包含向量的结构大小<;T>;DLL和EXE之间的大小不同

包含向量的结构大小<;T>;DLL和EXE之间的大小不同,dll,sizeof,stdvector,Dll,Sizeof,Stdvector,在这种情况下,EXE程序为单个函数调用导入DLL。它通过传入自定义结构并返回不同的自定义结构来工作。到目前为止,在我希望其中一个structs数据成员是vector 当我在我的程序中执行sizeof(vector)时,我得到的大小是20,但当我从DLL内部执行时,我得到的大小是24。此大小不一致导致ESP指针错误 有人能告诉我为什么向量在DLL中的大小与程序中的大小不同吗 我已经重新确认DLL和程序中的结构是相同的 如果能在这个问题上得到任何帮助,我将不胜感激。谢谢。当类有一个vector成员,

在这种情况下,EXE程序为单个函数调用导入DLL。它通过传入自定义结构并返回不同的自定义结构来工作。到目前为止,在我希望其中一个structs数据成员是vector

当我在我的程序中执行sizeof(vector)时,我得到的大小是20,但当我从DLL内部执行时,我得到的大小是24。此大小不一致导致ESP指针错误

有人能告诉我为什么向量在DLL中的大小与程序中的大小不同吗

我已经重新确认DLL和程序中的结构是相同的


如果能在这个问题上得到任何帮助,我将不胜感激。谢谢。

当类有一个vector成员,并且有一个内联构造函数(在头文件中实现)时,我遇到了类似的问题。 无论DLL是release还是DLL version,就像EXE是release version一样,EXE中计算出的类的大小比DLL中的小3字节,因此堆栈将被销毁

此问题可通过以下更改之一解决:

  • 这只发生在VC98(SP6)上。更改为VS2008,问题消失

  • 将内联构造函数移动到CPP文件,问题消失
    也是


我希望有人能提供更详细的解释。

这两个二进制文件是以相同的方式构建的(例如调试还是发布)?有些类在debug下构建时有额外的填充来帮助调试和不变检查。实际上奇怪的是,当我将EXE切换到release时,它们变成了相同的字节大小。我不确定为什么发布版本会比调试版本有更大的价值。。。。