程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 讓C程序更高效的10種方法(1)

讓C程序更高效的10種方法(1)

編輯:C++入門知識

代碼之美,不僅在於為一個給定問題找到解決方案,而且還在代碼的簡單性、有效性、緊湊性和效率內存)。代碼設計比實際執行更難 。因此,每一個程序員當用C語言編程時,都應該記著這些東西。本文向你介紹規范你的C代碼的10種方法。

0. 避免不必要的函數調用

考慮下面的2個函數:

  1. void str_print( char *str ) 
  2.   
  3.   
  4.     int i; 
  5.   
  6.     for ( i = 0; i < strlen ( str ); i++ ) { 
  7.   
  8.         printf("%c",str[ i ] ); 
  9.   
  10.     } 
  11.   
  12. void str_print1 ( char *str ) 
  13.   
  14.   
  15.     int len; 
  16.   
  17.     len = strlen ( str ); 
  18.   
  19.     for ( i = 0; i < len; i++ ) { 
  20.   
  21.         printf("%c",str[ i ] ); 
  22.   
  23.     } 
  24.   
  25. }
  1. <​span class="Apple-style-span" 
  2. style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;">
  3. 請注意 這兩個函數的功能相似。然而,第一個函數調用strlen)函數多次,而第二個函數只調用函數strlen)一次。因此第一個函數性能明顯比第二個好。
  4. </span>
  5. <span style="color: red;">
  6. <strong>更新:原作者應該是筆誤,把第一個函數寫成優於第二個,否則自相矛盾。)</strong>
  7. </span> 

1、避免不必要的內存引用

這次我們再用2個例子來對比解釋:

  1. int multiply ( int *num1 , int *num2 ) 
  2.   
  3.   
  4.     *num1 = *num2; 
  5.   
  6.     *num1 += *num2; 
  7.   
  8.     return *num1; 
  9.   
  10. int multiply1 ( int *num1 , int *num2 ) 
  11.   
  12.   
  13.     *num1 = 2 * *num2; 
  14.   
  15.     return *num1; 
  16.   
  1. <span class="Apple-style-span" 
  2. style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: 13px; line-height: 19px; white-space: normal;">
  3. 同樣,這兩個函數具有類似的功能。所不同的是在第一個函數 1 for reading *num1 , 
  4. 2 for reading *num2 and 2 for writing to *num1)有5個內存的引用,而在第二個函數是只有2個內存引用one for reading *num2 and one for writing to *num1)。
  5. 現在你認為哪一個好些?
  6. </span> 

2、節約內存內存對齊和填充的概念)

  1. struct { 
  2.   
  3.     char c; 
  4.   
  5.     int i; 
  6.   
  7.     short s; 
  8.   
  9. }str_1; 
  10. struct { 
  11.   
  12.     char c; 
  13.   
  14.     short s; 
  15.   
  16.     int i; 
  17.   
  18. }str_2; 

假設一個字符需要1個字節,short占用2個字節和int需要4字節的內存。起初,我們會認為上面定義的結構是相同的,因此占據相同數量的內存。然而,而str_1占用12個字節,第二個結構只需要8個字節?這怎麼可能呢?

請注意,在第一個結構,3個不同的4個字節被分配到三種數據類型,而在第二個結構的前4個自己char和short可以被采用,int可以采納在第二個的4個字節邊界一共8個字節)。

3、使用無符號整數,而不是整數的,如果你知道的值將永遠是否定的。

有些處理器可以處理無符號的整數比有符號整數的運算速度要快。這也是很好的實踐,幫助self-documenting代碼)。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved