gpt4 book ai didi

c++ - 内存布局继承

转载 作者:太空狗 更新时间:2023-10-29 21:25:21 25 4
gpt4 key购买 nike

考虑以下两个结构:

struct A
{
// A bunch of standard layout data
};

struct B:public A
{
// Other data
};

还有一个对象

B foo;

假设 sizeof(A) 在编译器之间没有区别,包装是相同的并且 B 没有添加任何虚拟方法,那么当使用 gcc 或 msvc 编译Windows x86 或 x86-64 平台?

编辑:我意识到实现继承的最佳方式是将 A 放在 B 之前。否则,upcast 需要用 sizeof(B) 偏移 this 指针,这很愚蠢。至少GCC把B的内容放在A的内容之后。

最佳答案

x86_64架构是个问题,GCC和MSVC选择了不同的内存模型。 GCC 是 LP64,MSVC 是 LLP64。换句话说,long 类型在 GCC 中是 64 位,在 MSVC 中是 32 位。

“相同地址”在这个问题中非常含糊,但如果 A 和 B 不是由同一个编译器编译的,显然你会遇到问题。在这种情况下,不同的包装也可能是一个问题。从相同的歧义进行插值,如果 B 包含任何虚拟成员而 A 不包含,则 A 和 B 的布局不兼容。 B 将插入 v 表指针。

关于c++ - 内存布局继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14134784/

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