我是一名有用的助手,可以为您翻译文本。
我将这段代码放在项目的两个不同部分,得到了两个不同的结果。一次是2254,另一次是2284。我可以查看内存布局,其中一个区域显示内部成员按字节对齐,而另一个区域则按字对齐。
我查看反汇编代码并发现sizeof()值实际上是机器码的一部分。这是编译器或链接器中的错误吗?为什么同一项目的两个部分会以不同方式查看相同的类?
编辑:
让我提供一个更清晰的示例,以表明这不是ODR违规。
我刚刚创建了一个全新的类,如下所示:
如果类对齐到4,则应返回sizeof() = 8,这正是我想要的。但我的代码中有某些类返回sizeof() = 7。
实际上,当我进入new()运算符时,有时它会分配7个字节,有时它会分配8个字节。
我正在将几个项目链接在一起,起初我以为这与项目设置有关,但同一项目的不同部分将显示差异。
我正在尝试解决一个C++问题,其中我的代码的两个部分返回sizeof()运算符的不同结果。
以下是我运行的内容:
MyClass* foo = new MyClass();
int size = sizeof(*foo)
我将这段代码放在项目的两个不同部分,得到了两个不同的结果。一次是2254,另一次是2284。我可以查看内存布局,其中一个区域显示内部成员按字节对齐,而另一个区域则按字对齐。
我查看反汇编代码并发现sizeof()值实际上是机器码的一部分。这是编译器或链接器中的错误吗?为什么同一项目的两个部分会以不同方式查看相同的类?
编辑:
让我提供一个更清晰的示例,以表明这不是ODR违规。
我刚刚创建了一个全新的类,如下所示:
class TestAlignClass
{
public:
TestAlignClass() { }
~TestAlignClass() { }
private:
char charArray[3];
int myInt;
};
如果类对齐到4,则应返回sizeof() = 8,这正是我想要的。但我的代码中有某些类返回sizeof() = 7。
实际上,当我进入new()运算符时,有时它会分配7个字节,有时它会分配8个字节。
我正在将几个项目链接在一起,起初我以为这与项目设置有关,但同一项目的不同部分将显示差异。
sizeof
函数运行正常:你以某种方式有两个MyClass
的定义,一个是按字节对齐的,一个则不是。 - alexis