问题标签 [struct-member-alignment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
69 浏览

c++ - 菱形(多重)虚拟继承中的 C++ 成员和 vtable 顺序

我想知道 C++ 中成员变量和 vtable 指针在菱形虚拟继承上的顺序。

考虑以下继承:

我想知道Derived3类的内存布局。我在网上查看了以下链接:

c++数据对齐/成员顺序&继承

C++ 继承内存模型

经过以上链接后,我觉得Derived3的内存布局可能是:

在线编译器将Derived3的大小设置为 40 字节,所以我觉得(假设指针为 8 字节,int 为 4 字节)int b必须在vtable_ptr2 (8( vtable_ptr1 ) + 4( d ) + [4 padding] + 8之后( vtable_ptr2 ) + 4( d2 ) + 4( b ) + 4( d3 ) + [4 class padding]) 或之前vtable_ptr1 (4( b ) + [4 padding] + 8( vtable_ptr1 ) + 4( d ) + [ 4 填充] + 8( vtable_ptr2 ) + 4( d2 ) + 4( d3)) 以便填充出现并将类的大小增加到 40。

总而言之,我有以下问题:

顺序是否正确?如果不是,那么成员变量和 vtable 指针的正确顺序是什么?