bytecode 字節碼,和 opcode 操作碼各是什麼?
有什麼差別?
解釋型語言都有類似的碼嗎?
我的理解是:
bytecode 和 opcode 都是中間碼
#解釋型語言都會將原始碼翻譯成中間碼,再由虛擬機器(例如 jvm, zend)解釋執行
走同样的路,发现不同的人生
opcode 就是 Operation Code。
在 java 中使用的 bytecode 也是一種 opcode,因為每個操作碼都是用一個字節,所以叫字節碼(其實也有多字節的)。
每一個位元組用來表示一個指令,理論上可以有 256 個操作碼。
我們平常常看到的 iadd(將兩個整數相加)、dadd(將兩個浮點數相加)並不是字節碼,而是助記符。
iadd
dadd
很多解釋型語言都沒有類似的碼。
bytecode和opcode都是一種中間碼,不存在可比性,java編譯成中間碼bytecode然後在jvm中執行,,php編譯成中間碼opcode,在ZendVM中執行。
opcode 就是 Operation Code。
在 java 中使用的 bytecode 也是一種 opcode,因為每個操作碼都是用一個字節,所以叫字節碼(其實也有多字節的)。
每一個位元組用來表示一個指令,理論上可以有 256 個操作碼。
我們平常常看到的
iadd
(將兩個整數相加)、dadd
(將兩個浮點數相加)並不是字節碼,而是助記符。很多解釋型語言都沒有類似的碼。
bytecode和opcode都是一種中間碼,不存在可比性,java編譯成中間碼bytecode然後在jvm中執行,,php編譯成中間碼opcode,在ZendVM中執行。