很多學C語言的人忽略的事兒,一文了解C語言內存節省方法

前言

很多學C語言的人忽略的事兒,一文了解C語言內存節省方法

首先單片機編程和計算機編程有個最大的差別就是單片機的資源非常的有限,所以在內存上面要求比普通軟件開發要求更高。其次,在網絡編程當中,網絡數據的傳輸也是需要注意數據設計內存的大小的。面我總結了幾種常總方法供大家參考。

共聯體-union

union-共聯體,是C語言常用得關鍵字。從字面上的意思就是共同聯合在一起的意思,union所有的成員共同維護一段能夠內存空間,其內存的大小取決於所有成員中佔用空間最大的成員。聯合體的特色如下:

  • 所有的union的成員及本身的地址是一樣的。
  • union的存儲模型受大小端的影響。
很多學C語言的人忽略的事兒,一文了解C語言內存節省方法

大小端知識

大端模式(Big_endian):一個數據的高字節存儲在低地址,低字節存儲在高地址。其指針指向的首地址位於低地址。

小端模式(Little_endian):一個數據的高字節存儲在高地址,低字節存儲在低地址。其指針指向的首地址位於高地址。

很多學C語言的人忽略的事兒,一文了解C語言內存節省方法


位域

位域可能對於初學者用得比較少,不過對於大部分參加工作的工程師應該屢見不鮮了,確實它也是我們省內存的神器。

  • 位域是在結構體中實現的,且一個位域只能定義在同一個存儲單元中。
  • 無名位域的使用,可以看下面的代碼。
  • 由於位域與數據類型有關係,那麼他的內存佔用情況也與平臺的位數相關。
很多學C語言的人忽略的事兒,一文了解C語言內存節省方法

結構體對齊

​ 結構體對齊問題可能大部分人關注的不是很多,可能在通訊領域進行內存的copy時候接觸得比較多。結構體對齊問題也是與平臺相關,CPU為了提高訪問內存的效率,一次性可能讀取2個字節,4個字節,8個字節等,所以編譯器會自動對結構體內存進行對齊。

廢話不多說,代碼說明一切:

很多學C語言的人忽略的事兒,一文了解C語言內存節省方法

算法優化

算法優化其實主要是我們通過修改一些算法的實現一種效率與內存使用的一個平衡,我們都知道我們的算法都存在著複雜度的問題,我們大部分高效率的算法都是通過使用內存來換效率,也就是一種用空間換時間的概念。那麼當我們內存使用有限的時候我們可以適當的用時間來換空間的方法,騰出更多的空間來實現更多的功能。還有就是儘量使用局部變量來減少全局變量的使用!

尾言

如果閣下C語言比較差的,二進制都不知道是什麼的同學,不妨關注下小編的專欄視頻教程

通俗易懂,深入淺出,一個視頻只講一個知識點。視頻不深奧,不需要鑽研,在公交、在地鐵、在廁所都可以觀看,隨時隨地漲姿勢,人人都可以學習的C語言課程


分享到:


相關文章: