gpt4 book ai didi

c - 用户定义的数据类型/操作到 CPU 指令集

转载 作者:太空宇宙 更新时间:2023-11-04 06:44:07 26 4
gpt4 key购买 nike

在任何编程环境中,无论我选择何种数据类型,最终 CPU 都只会执行算术运算(加法/逻辑运算)。

这种转变(从用户定义的数据类型/操作到 CPU 指令集)是如何发生的,编译器、解释器、汇编器和链接器在这个生命周期中的作用是什么

还有 OOPS 如何处理这种映射,因为最坏的情况大多数都是 OOPS 中的对象(我指的是 Java 语言)..

最佳答案

Java 源代码 --> native 代码转换实际上发生在两个不同的步骤中:在编译时从源代码到字节码的转换(这就是 javac 所做的),以及从字节码到 native CPU 的转换运行时的指令(这就是 java 所做的)。

当源代码被“编译”时,字段和方法被压缩到符号表中的条目中。你说“System.out.println()”,然后 javac 将它变成类似“获取符号 #2004 引用的静态字段,并在其上调用符号 #300 引用的方法”之类的东西(#2004 可能是“System.out”,#300 可能是“void java.io.PrintStream.println()”)。 (请注意,我过于简单化了——这些符号看起来一点也不像那样,而且它们被分开了一点。但它们确实包含了那种信息。)

在运行时,JVM 查看这些符号,加载其中引用的类,并运行(或生成,如果它是 JITting)查找和执行方法所需的 native 指令。 Java 中没有真正的“链接器”;所有链接都是在运行时根据引用的类完成的。这很像 DLL 在 Windows 中的工作方式。

JIT 是最接近“汇编程序”的东西。它获取字节码并动态生成等效的 native 代码。不过,字节码不是人类可读的形式,所以我通常不会将翻译算作“汇编”。

...

在 C 和 C++(不是 C++/CLI)等语言中,情况就完全不同了。所有的翻译(以及一些链接)都发生在编译时。对 struct 成员的访问被转换为类似“给我从这组特定字节开始的 int 4 字节”之类的东西。那里没有灵 active ;如果结构的布局发生变化,通常必须重新编译整个应用。

关于c - 用户定义的数据类型/操作到 CPU 指令集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3845787/

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