關鍵區別-機器相關代碼優化與機器無關代碼優化
計算機程序是一組指令,用於執行任務。這些程序大多是用高級語言編寫的,而計算機不理解這種語言。因此,編譯器用於將這些指令轉換為機器代碼或目標代碼。它經過幾個階段來構建目標代碼。代碼優化就是其中之一。有兩種優化技術,如機器依賴和機器無關的代碼優化。機器依賴代碼優化與機器無關代碼優化的關鍵區別在於,將機器依賴優化應用於對象代碼,而中間代碼採用機器無關代碼優化。
目錄
1. 概述和主要區別
2. 什麼是依賴機器的代碼優化
3. 什麼是獨立於機器的代碼優化
4. 機器相關和機器無關代碼優化的相似性
5. 並排比較-以表格形式進行機器相關代碼優化與機器無關代碼優化
6. 摘要
什麼是依賴機器的代碼優化(machine dependent code optimization)?
在將源代碼轉換為目標代碼或目標代碼時,編譯器要經歷幾個階段。首先,源代碼提供給詞法分析器,後者生成標記。然後,輸出給語法分析器,語法分析器檢查生成的標記是否按邏輯順序排列。這個輸出被提供給語義分析器。假設有一段代碼p=q+r;
這裡,p,q是整數,而r是浮點數。使用語義分析器,將c整型變量轉換為float。因此,本文進行了語義分析。語義分析器的輸出到中間代碼生成器。它返回一箇中間代碼,然後轉到代碼優化器。代碼優化是在不改變實際源代碼含義的情況下消除不必要的程序語句的過程。它不是一個強制性的優化,但是它可以提高目標代碼的運行時間。代碼優化器的輸出被提供給代碼生成器,最後生成目標代碼。
在依賴機器的代碼優化中,對源代碼進行優化。在這種優化中,分配足夠的資源可以提高程序的執行效率。
什麼是機器無關代碼優化(machine independent code optimization)?
對中間代碼進行優化時,稱為機器無關代碼優化。實現獨立於機器的代碼優化有不同的技術。下面的例子對它們進行了描述。
閱讀下面幾行代碼。
對於(j+;j=10+){
b=x+2;
a[j]=5*j;
}
根據上面的代碼,在每次迭代中反覆計算b=x+2。一旦計算出b,它不會改變。所以,這條線可以放在循環的外面,如下所示。
b=x+2;
對於(j=0;j<10;j++)
{a[j]=5*j;
}
這叫做代碼移動。
閱讀下面幾行代碼。
j=5;
如果(j==10){
a=b+20;
}
根據上面的代碼,“if塊”永遠不會執行,因為j值永遠不會等於10。它已初始化為值5。因此,這個if塊可以被移除。這種技術是死代碼消除。
另一種方法是強度降低。像乘法這樣的算術運算需要更多的內存、時間和CPU週期。這些昂貴的表達式可以用廉價的表達式代替,比如b=a*2;或者可以用加法代替,b=a+a;
參考以下代碼。
對於(j=1;j<=5;j++){
值=j*5;
}
代替乘法,可以按如下方式更改代碼。
內部溫度=5;
對於(j=1;j<=5;j++){
溫度=溫度+5;
值=溫度;
}
可以在運行時計算作為常量的表達式。這叫做恆定摺疊。可以這樣表述:b[j+1]=c[j+1];
相反,它可以更改如下。
n=j+1;
b[n]=c[n];
可以有如下循環。
對於(j=0;j<5;j++){
printf(“a\n”);
}
對於(j=0;j<5;j++){
printf(“b\n”);
}
打印a和b,都有相同的迭代次數。兩個都可以組合成一個for循環,如下所示。
對於(j=0;j<5;j++){
printf(“a\n”);
printf(“b\n”);
}
另一個重要的技術是通用子表達式消除。它是用一個變量替換相同的表達式來進行計算。參考以下代碼。
a=b*c+k;
d=b*c+m;
此代碼可以按如下方式轉換。
溫度=b*c;
a=溫度+k;
d=溫度+m;
不需要反覆計算b*c。乘以的值可以存儲在一個變量中並可以重用。
什麼是機器相關和機器無關代碼優化的相似性(the similarity between machine dependent and machine independent code optimization)?
- 這兩個都屬於代碼優化
取決於機器(machine dependent)和機器無關代碼優化(machine independent code optimization)的區別
機器相關代碼優化與機器無關代碼優化 | |
將機器相關代碼優化應用於目標代碼。 | 中間代碼採用機器無關代碼優化。 |
與硬件有關 | |
與機器相關的優化包括CPU寄存器和絕對內存引用。 | 與機器無關的代碼優化不涉及CPU寄存器或絕對內存引用。 |
總結 - 取決於機器(machine dependent) vs. 機器無關代碼優化(machine independent code optimization)
代碼優化包括兩種優化技術,即機器相關代碼優化和機器無關代碼優化。機器相關代碼優化與機器無關代碼優化的區別在於,機器相關代碼優化應用於目標代碼,而機器無關代碼優化應用於中間代碼。
下載與機器相關的與機器無關的代碼優化的pdf版本
你可以下載這篇文章的PDF版本,並按照引文說明離線使用。請在此下載PDF版本機器相關和機器無關代碼優化的區別
引用
1.“編譯器設計|代碼優化。”GeeksforGeeks。這裡有2點,教程。“編譯器設計-代碼優化。”Www.tutorialspoint.com網站,教程點,2017年8月15日。這裡有3.Estudies4you。“JNTUH CSE學習材料”,機器相關和獨立代碼優化的區別。此處提供
2.要點,教程。“編譯器設計-代碼優化。”Www.tutorialspoint.com網站,教程點,2017年8月15日。
3.研究你。“JNTUH CSE學習材料”,機器相關和獨立代碼優化的區別。