1. 程式人生 > >【程式設計珠璣】第十章 節省空間

【程式設計珠璣】第十章 節省空間

一,概述

       1)節省空間帶來的好處

             程式變小使得載入更快;更容易讀入快取記憶體;需要操作的資料減少從而減少操作時間。

       2)節省空間的方法

              數學函式式替代要儲存的資料。簡單例子為:a[i]=i 。如果你要讀取陣列第i個元素只需要通過函式f(i) = i得到元素值,而不需要將所有資料儲存在陣列中。

              改變資料結構。如果一個數字範圍為0-200,則完全沒有必要採用32位的int型儲存,只需要採用8位的無符號char型儲存即可。

              連結串列替代稀疏二維陣列。雖然指標也需要空間儲存,如果二維陣列儲存很少的資料,則可以考慮權衡一下是否要用連結串列代替稀疏二維陣列。(陣列表示列,連結串列表示行的方式。而不是單鏈表)

        3)減少程式所需資料的儲存空間的技術

              1> 不儲存,重新計算。

                    典型的時間換空間策略,假如判斷質數:用函式判斷是否為質數相對於查詢質數表就是時間換空間的例子。

                    在網路傳輸時候,往往時間顯得很重要。採用本地快取的方式減少需要傳輸的資料量。

              2> 稀疏資料結構。 

                   使用指標共享大型物件,消除儲存同一物件的眾多副本的開銷

                   其他方法,你懂得……嘿嘿大笑

3> 資料壓縮。 

                   用8位的char替代 32位的int 。

                   利用函式將兩個十進位制數,放到一個位元組裡。加密:c= 10 * a + b;    解密:a= c / 10 ;   b= c % 10;

                   生氣注意 / 和 %運算子開銷較大,即執行時佔用記憶體較多。如果採用這種方法,相當於用較小的記憶體來換取儲存位元組的磁碟儲存空間。

              4> 分配策略。

                    動態分配替代靜態分配。即只有在需要的時候才分配空間。

              5> 垃圾回收。

        4)程式碼空間技術

              奮鬥奮鬥奮鬥

二,習題

        6)加密:c= 10 * a + b;    解密:a= c / 10 ;   b= c % 10;

             更優化策略:

                    加密:c= a<<4 | b;    解密:a= c >> 4 ;   b= c & 0xF;

              解釋下把:c為8個位元組,一般只使用低位的四位。加密時將a提高到高四位。再與b異或,則b放到位元組底四位。解密時,將底四位的b移走得到a 。將c跟低四位為1111的數相與得到b

10)原始聲音檔案(wav)取樣率高佔用儲存空間大。在保證人耳聽不出失真情況下,降低取樣率,形成壓縮MP3的聲音格式檔案。

                原始圖片檔案(raw,bmp),無失真壓縮成gif格式。有失真壓縮成jpeg

                原始視訊檔案(avi:音訊視訊交錯(Audio Video Interleaved))。壓縮成(3GP,mpg)