1.簡述編譯程序與翻譯程序、彙編程序的聯繫與區別。程序員
答: 翻譯程序是指把高級語言源程序翻譯成機器語言源程序的軟件。編程
翻譯程序有兩種:一種是編譯程序,它將高級語言源程序一次性所有翻譯成目標程序,每次執行程序時,只要執行目標程序。另外一種是解釋程序,它的執行過程是翻譯一句執行一句,而且不會生成目標程序。多線程
編譯程序是先完整編譯後運行的程序;解釋程序是一句一句翻譯且邊翻譯邊執行的程序。編程語言
彙編程序也是一種語言翻譯程序,它把彙編語言源程序翻譯成機器語言程序。性能
彙編程序:翻譯彙編語言源程序,產出基本就是二進制機器指令。 編譯程序:會產生目標程序,真正執行、運行的是目標程序。優化
2.編譯過程包括哪幾個主要階段及每一個階段的主要功能。spa
答:編譯過程一般分爲詞法分析、語法分析、語義分析、中間代碼生成、代碼優化和目標代碼生成六個主要階段。各個階段的主要功能以下:線程
詞法分析階段:讀入源程序,對構成源程序的字符流進行掃描和分解,識別出一個個單詞,並表示成計算機內部的形式。翻譯
語法分析階段:在詞法分析的基礎上,將單詞序列分解成各種語法短語,肯定整個輸入串是否構成語法上正確的程序。內存
語義分析階段:審查源程序有無語義錯誤,爲代碼生成階段收集類型信息。
中間代碼生成階段:將源程序翻譯成一種複雜性介於源程序與目標程序之間的內部形式(中間代碼)。
代碼優化:對前階段產生的中間代碼進行等價交換,目的是使未來生成的目標代碼更爲高效。
目標代碼生成:把中間代碼變換成待定機器上的絕對指令代碼或可重定位的指令代碼或彙編指令代碼。
3.簡述解釋程序與編譯程序的區別。
答:編譯程序能生成目標程序,而解釋程序不能。
編譯程序是總體編譯完了,再一次性執行。而解釋程序是一邊解釋,一邊執行。 解釋一句後就提交計算機執行一句,並不造成目標程序。就像外語翻譯中的「口譯」同樣,說一句翻一句,不產生全文的翻譯文本。
4.瞭解新開源的華爲方舟編譯器,理解並談談它的基本思想與採用的技術路線,以及它對安卓軟件生態會有什麼影響。
答:編譯器是鏈接人類世界與機器世界之間的一座橋樑,任何在手機上的程序都須要經歷軟件開發的過程,軟件開發使用的語言是易於程序員理解的高級語言,程序在手機上運行須要轉換成能夠高效執行的機器碼,這樣的轉換過程就是由編譯器完成的。能夠說編譯器是用來生成軟件的軟件,是鏈接軟件與芯片的橋樑,其性能,效率直接影響到最基礎的消費者體驗。
安卓系統使用Java做爲編程語言,易於開發,可是不會將代碼直接編譯成機器語言,程序運行時有至關一部分代碼還須要經過手機上的虛擬機臨時同步編譯,影響程序執行的效率。華爲方舟編譯器採起了靜態編譯的方式,是首個取代了安卓虛擬機模式的靜態編譯器。
如今安卓手機的一大特點就是內存愈來愈大,6GB都是老人機的配置了。這除了程序大之外還有安卓的程序運行產生垃圾多有關係。那麼清理垃圾呢?則須要暫停程序,也就會頓一下,即所謂的「卡」。華爲方舟編譯器則是利用程序多線程運行的特色。打個比方,您如今正在用的「中關村在線」這個APP用了AB兩個線程,在華爲的P30手機中,那麼線程A運行的時候,B在清理垃圾,而後A線程清理垃圾的時候B線程在運行,程序運行不中斷,垃圾處理不停,作到了又連貫、又節約系統資源,大幅度提升安卓軟件的運行速度。