C++ 虚继承 对象内存布局

-Xclang -fdump-record-layouts




下面是一张更改了部分代码的示意图,下图中是基于Clang编译器的结果

下面代码片段是基于GCC的结果,其中的jmp 后的地址,gcc是以.LTHUNK0 , .LTHUNK1, .LTHUNK2 来表示Base::Foo , Base2::Boo ,Derived::KKK函数:


Base1::Foo():
        push    rbp
        mov     rbp, rsp
        mov     QWORD PTR [rbp-8], rdi
        mov     rax, QWORD PTR [rbp-8]
        mov     QWORD PTR [rax+8], 255
        nop
        pop     rbp
        ret
virtual thunk to Base1::Foo():
        mov     r10, QWORD PTR [rdi]
        add     rdi, QWORD PTR [r10-24]
        jmp     .LTHUNK0


Base2::Boo():
        push    rbp
        mov     rbp, rsp
        mov     QWORD PTR [rbp-8], rdi
        mov     rax, QWORD PTR [rbp-8]
        mov     QWORD PTR [rax+8], 64
        nop
        pop     rbp
        ret
virtual thunk to Base2::Boo():
        mov     r10, QWORD PTR [rdi]
        add     rdi, QWORD PTR [r10-32]
        jmp     .LTHUNK1


Derived::KKK():
        push    rbp
        mov     rbp, rsp
        mov     QWORD PTR [rbp-8], rdi
        nop
        pop     rbp
        ret
virtual thunk to Derived::KKK():
        mov     r10, QWORD PTR [rdi]
        add     rdi, QWORD PTR [r10-40]
        jmp     .LTHUNK2
posted @   MarsCactus  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示