關注你的程式效率 1

2021-05-23 21:03:16 字數 2590 閱讀 5010

1:程式設計時要經常注意**的效率。

說明:**效率分為全域性效率、區域性效率、時間效率及空間效率。全域性效率是站在整個系統的角度上的系統效率;區域性效率是站在模組或函式角度上的效率;時間效率是程式處理輸入任務所需的時間長短;空間效率是程式所需記憶體空間,如機器**空間大小、資料空間大小、棧空間大小等。

2:在保證軟體系統的正確性、穩定性、可讀性及可測性的前提下,提高**效率。

說明:不能一味地追求**效率,而對軟體的正確性、穩定性、可讀性及可測性造成影響。

3:區域性效率應為全域性效率服務,不能因為提高區域性效率而對全域性效率造成影響。

4:通過對系統資料結構的劃分與組織的改進,以及對程式演算法的優化來提高空間效率。

說明:這種方式是解決軟體空間效率的根本辦法。

示例:如下記錄學生學習成績的結構不合理。

typedef unsigned charbyte;

typedef unsigned short word;

typedef struct student_score_stru

byte name[8];

byte age;

byte ***;

byte class;

byte subject;

float score;

} student_score;

因為每位學生都有多科學習成績,故如上結構將占用較大空間。

應如下改進(分為兩個結構),總的存貯空間將變小,操作也變得更方便。

typedef struct student_stru

student;

typedef struct student_score_stru

student_score; 5

:迴圈體內工作量最小化。

說明:應仔細考慮迴圈體內的語句是否可以放在迴圈體之外,使迴圈體內工作量最小,從而提高程式的時間效率。

示例:如下**效率不高。

for (ind = 0; ind < max_add_number; ind++)

語句「back_sum = sum;

」完全可以放在

for語句之後,如下。

for (ind = 0; ind < max_add_number; ind++)

back_sum= sum; /* backup sum */ 6

:仔細分析有關演算法,並進行優化。

7:仔細考查、分析系統及模組處理輸入(如事務、訊息等)的方式,並加以改進。

8:對模組中函式的劃分及組織方式進行分析、優化,改進模組中函式的組織結構,提高程式效率。

說明:軟體系統的效率主要與演算法、處理任務方式、系統功能及函式結構有很大關係,僅在**上下功夫一般不能解決根本問題。 9

:程式設計時,要隨時留心**效率;優化**時,要考慮周全。

10:不應花過多的時間拼命地提高呼叫不很頻繁的函式**效率。

說明:對**優化可提高效率,但若考慮不周很有可能引起嚴重後果。 11

:要仔細地構造或直接用彙編編寫呼叫頻繁或效能要求極高的函式。

說明:只有對編譯系統產生機器碼的方式以及硬體系統較為熟悉時,才可使用彙編嵌入方式。

嵌入彙編可提高時間及空間效率,但也存在一定風險。 12

:在保證程式質量的前提下,通過壓縮**量、去掉不必要**以及減少不必要的區域性和全域性變數,來提高空間效率。

說明:這種方式對提高空間效率可起到一定作用,但往往不能解決根本問題。 13

:在多重迴圈中,應將最忙的迴圈放在最內層。

說明:減少

cpu切入迴圈層的次數。

示例:如下**效率不高。

for (row = 0; row < 100; row++)

} 可以改為如下方式,以提高效率。

for (col = 0; col < 5; col++)

} 14:儘量減少迴圈巢狀層次。

15:避免迴圈體內含判斷語句,應將迴圈語句置於判斷語句的**塊之中。

說明:目的是減少判斷次數。迴圈體中的判斷語句是否可以移到迴圈體外,要視程式的具體情況而言,一般情況,與迴圈變數無關的判斷語句可以移到迴圈體外,而有關的則不可以。

示例:如下**效率稍低。

for (ind = 0; ind < max_rect_number; ind++)

else

} 因為判斷語句與迴圈變數無關,故可如下改進,以減少判斷次數。

if (data_type == rect_area)

} else

} 16:盡量用乘法或其它方法代替除法,特別是浮點運算中的除法。

說明:浮點運算除法要占用較多

cpu資源。

示例:如下表示式運算可能要佔較多

cpu資源。

#define pai 3.1416

radius = circle_length / (2 * pai);

應如下把浮點除法改為浮點乘法。

#define pai_reciprocal (1 / 3.1416 ) //

編譯器編譯時,將生成具體浮點數

radius = circle_length * pai_reciprocal / 2; 17

:不要一味追求緊湊的**。

說明:因為緊湊的**並不代表高效的機器碼。

提公升你的效率

最近發現工作中,老是有些很讓人煩躁的事情,而這些事情你不做就沒有人去做,從而會導致整個專案就會是有你的進度而確定的。先簡單概述下,狀況 我負責整合工作 有兩三個同事負責提供庫,還有乙個專案經理打包和一名測試人員,大家坐的位置比較分散。我這邊的 量不是很多,庫那邊的同事也主要是修改。但他媽的這個工作的...

關注程式設計師健康之 保護你的腰椎

不用我多說,我們程式設計師一坐就在電腦前坐個半天的,有的時候工作到忘我的時候,經常是整天屁股也沒挪個位子,腰受得了嗎 人體最累的不是腿,而是腰。雖然每天走路要用到腿,但坐下時腿已經休息了,腰還在支撐著體重。所以,腰椎的保養非常重要。我相信各位每天坐辦公室的時候不少於10小時吧,坐車2小時,回家 久坐...

關注你的基金投資些什麼

投資人在購買 之前,有乙個需要關注的問題便是你的 投資些什麼?了解 的投資組合或是 怎樣投資,從而判斷其是否符合自己的理財目標。就象在餐館點菜,名稱再好聽,也要了解配料和做法,才能選擇適合自己口味的菜式。目前國內 投資範圍可以是 債券或現金等。如果 投資 可能是大型知名企業,或是不出名的小公司 可以...