UnT*_*aDe 5 compiler-construction oop compilation
我用C++或C#编写的oop代码究竟是如何转换为机器代码的,或者在C#的情况下转换为字节码?我的意思是,对象如何翻译?
在程序编程中,编译后它看起来很明显,因为机器语言中的函数实际上是真正的支持.但是在oop编程的情况下,机器语言中没有对象.
我的理论是它将对象本身编译为某种类似C的结构,它只包含数据(没有成员函数),并且当调用memeber函数时,如果接受一个addion参数,它是对象本身的数据结构.我对吗?
它依赖于实现。但在实践中,常见的是使用虚拟表(“vtable”)。每个类都有一个虚拟表,其中包含指向每个成员函数的实现的指针列表。每个对象都有一个指向相应虚函数表的指针。
根据语言和编译器标志,可以通过函数签名(名称和参数)或简单地通过索引来查找 vtable 中适当的指针。
当通过其 vtable 指针调用成员函数时,它肯定需要一个指向对象数据的指针。但这可能会在堆栈或寄存器中传递。