大家好,今天小编来为大家解答Java可以像C++内嵌汇编语言一样,内嵌Java字节码吗这个问题,不建议使用内联汇编很多人还不知道,现在让我们一起来看看吧!
本文目录
Java可以像C++内嵌汇编语言一样,内嵌Java字节码吗
谢谢邀请!
Java语言不提供像C的内联汇编一般的源码内嵌字节码的功能。
同时,虽然Java字节码能比Java语言稍微多做一些事情,但在性能方面没有什么是用字节码能达到而Java源码做不到的。Java字节码基本上可以看作Java语言的抽象语法树(AST)的序列化形式,两者的抽象程度差别不大。
题主有兴趣的话可以试试给出一些题主认为内嵌字节码能带来性能优势的例子,我可以试试把它们表达为等价的Java源码。
关于字节码到源码的对应关系,请参考另一个回答:如何理解ByteCode、IL、汇编等底层语言与上层语言的对应关系?-RednaxelaFX的回答
51单片机编程时汇编和C语言如何结合
C语言本身允许内联汇编,直接写C语言程序就可以。C语言和汇编本身结合的比较紧,多看看C语言编译器手册,上面一般都有怎么和汇编混合。写内联汇编要注意C编译器需要的寄存器需要保护。
gcc内联原理
指令部中使用了几个样板操作数,就表明有几个变量需要与寄存器相结合,这样GCC和GAS在编译和汇编时会根据后面给定的约束条件进行恰当的处理。由于样板操作数也使用’%‘作为前缀,因此在涉及到具体的寄存器时,寄存器名前面应该加上两个’%’,以免产生混淆。
紧跟在指令部后面的是输出部,是规定输出变量如何与样板操作数进行结合的条件,每个条件称为一个“约束”,必要时可以包含多个约束,相互之间用逗号分隔开就可以了。
每个输出约束都以’='号开始,然后紧跟一个对操作数类型进行说明的字后,最后是如何与变量相结合的约束。凡是与输出部中说明的操作数相结合的寄存器或操作数本身,在执行完嵌入的汇编代码后均不保留执行之前的内容,这是GCC在调度寄存器时所使用的依据。
输出部后面是输入部,输入约束的格式和输出约束相似,但不带’='号。如果一个输入约束要求使用寄存器,则GCC在预处理时就会为之分配一个寄存器,并插入必要的指令将操作数装入该寄存器。与输入部中说明的操作数结合的寄存器或操作数本身,在执行完嵌入的汇编代码后也不保留执行之前的内容。
文章到此结束,如果本次分享的Java可以像C++内嵌汇编语言一样,内嵌Java字节码吗和不建议使用内联汇编的问题解决了您的问题,那么我们由衷的感到高兴!