Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
面向对象的代码如何翻译成机器代码? 我在C++或C语言中写的OOP代码,究竟是如何翻译成机器代码的,还是在C语言中转换成字节码的?我的意思是,这些物体是如何翻译的_Oop_Compiler Construction_Compilation - Fatal编程技术网

面向对象的代码如何翻译成机器代码? 我在C++或C语言中写的OOP代码,究竟是如何翻译成机器代码的,还是在C语言中转换成字节码的?我的意思是,这些物体是如何翻译的

面向对象的代码如何翻译成机器代码? 我在C++或C语言中写的OOP代码,究竟是如何翻译成机器代码的,还是在C语言中转换成字节码的?我的意思是,这些物体是如何翻译的,oop,compiler-construction,compilation,Oop,Compiler Construction,Compilation,在过程编程中,编译后的效果非常明显,因为机器语言中真正支持函数。但是在面向对象编程的情况下,机器语言中没有对象 我的理论是,它将对象本身编译成某种类似C的结构,它只包含数据(没有成员函数),当调用memeber函数时,if接受一个附加参数,该参数是对象本身的数据结构。我说得对吗 无需猜测,只需查看生成的“程序集”(实际上是MSIL)代码: 它取决于实现。但在实践中,常见的情况是使用虚拟表(“vtable”)。每个类都有一个虚拟表,其中包含指向每个成员函数实现的指针列表。每个对象都会获得一个指向相

在过程编程中,编译后的效果非常明显,因为机器语言中真正支持函数。但是在面向对象编程的情况下,机器语言中没有对象


我的理论是,它将对象本身编译成某种类似C的结构,它只包含数据(没有成员函数),当调用memeber函数时,if接受一个附加参数,该参数是对象本身的数据结构。我说得对吗

无需猜测,只需查看生成的“程序集”(实际上是MSIL)代码:


它取决于实现。但在实践中,常见的情况是使用虚拟表(“vtable”)。每个类都有一个虚拟表,其中包含指向每个成员函数实现的指针列表。每个对象都会获得一个指向相应vtable的指针

根据语言和编译器标志的不同,vtable中的相应指针可以通过函数签名(名称和参数)或简单的索引进行查找


当通过其vtable指针调用成员函数时,请确保它需要指向对象数据的指针。但这可能会在堆栈或寄存器中传递。

OOP中所有面向对象的特性都只是一种更高级别的编程结构,使开发人员能够在包含原型及其实例的范例中编写模块化和有组织的代码。oop代码在机器代码中没有等价物


这更像是我们在typescript中拥有接口,然后转换成javascript,而javascript没有接口的概念。(这可能不是一个很好的例子)

,C++案例呢?最后,它们都应该在相同的结构或内存布局中查找,不是吗?有多种方法可以做到这一点?因为,例如,你也可以将这个结构与函数一起使用,但我认为这不太可能,因为如果对象在ans上复制相同的函数,它会消耗更多的内存。编写一个“hallo world”C程序。用gcc-ohw.c编译它。发布objdump-d hw。这是同一个故事,什么变化只是工具名称和具体的指示。目标CPU不同:它是.NET中的虚拟,在C++中是真实的。