Bitcode 與 Bytecode

大家都知道 Android 裡面有 Java virtual machine (JVM), 而 JVM 上面執行的就是 Java 的 byte code. Byte code 具有跨平台的性質, 所以 Java 可以 compile once, execute everywhere. 但 Android 裡面還有一個 bit code 就太為人所知.

Bit code 的功能和 byte code 一樣, 但是它不僅限於 Java 語言. 根據伊利諾大學的 LLVM (Low Level Virtual Machine) 計畫, front end 的 compiler 可以是 GCC, 而支援的語言包括 Ada, C, C++, D, Fortran, 和 Objective-C 等等. 這些高階語言被編成 LLVM IF (intermediate form), 然後被放在 virtual machine 上執行. 當然, 從 IF 也可以直接再編成可執行檔.

LLVM 的官網似乎都是用 LLVM IR (intermediate representation) 來代替 IF (WIKI 用語) 一詞, 而這個 LLVM Bitcode File Format 在他們的官網就可以找得到. 

Bit code 除了跨平台之外, 還有什麼好處呢?Google 在推的 RenderScript Compute 就是其中一個應用.  使用者可以先寫好 script, 然後交給 LLVM compiler 去翻譯成對平台最有利的 binary. 比方說這個平台的 GPU (Graphic processor unit) 很弱, 那麼某些 code 在 just in time compile 的時候就會讓 CPU 多分擔一點工作. 從 Android 3.0 的 Honeycomb 開始就支援 LLVM compiler 的 API, 放在 /system/lib/libbcc.so.

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料