日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于字节对齐

發布時間:2023/12/10 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于字节对齐 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于字節對齊

    • 前言
    • 意義
    • 自定義字節對齊
      • 存儲空間
      • 內存讀取效率
      • 平臺適應性
    • 結論

前言

計算機中的內存空間大小是以字節(byte)為基本單位劃分的,從理論上講似乎對任何類型的變量的訪問可以從任何地址開始,而計算機并非逐字節大小讀寫內存,而是以2,4,或8的倍數的字節塊來讀寫內存,則特定類型變量的時候經常需要在特定的內存地址訪問,這就需要各種類型數據按照一定的規則在空間上排列,這就是對齊。

意義

實際上編程中,字節對齊的工作一般由編譯器來自動實現了,我們可以不用刻意進行字節的對齊,但是如果對于系統性能有較高的要求時,字節對齊也是一個需要考慮的優化方向。下面基于結構體的字節對齊,以存儲空間、內存讀取效率、平臺適應性三個方面進行介紹。

自定義字節對齊

#pragma pack (n) //編譯器將按照n個字節對齊。 .... #pragma pack() //取消自定義字節對齊方式。

存儲空間

如下代碼:

typedef struct {char a;short b;int c;int d;}inputInfo;typedef struct {char a;int b;short c;int d; }inputInfo1;

以上兩個結構體占用空間分別為12與16,可以看到雖然都是相同數據變量,不同的排列順序會有不同的影響,這是編譯器自動進行的字節填充造成的,因此合理安排變量位置可以節省不少的內存占用空間。

內存讀取效率


由上圖可知,在沒有字節對齊的情況下,變量b是通過兩次才被真正讀取到,讀取數據總共用了3次,而字節對齊后只用了2次,因此可以提高內存的讀取效率,只不過是在犧牲內存空間的條件下。

平臺適應性

由于不同平臺在對存儲空間的處理上有很大的不同,因此,同樣的結構在不同平臺的對齊方式有所不同,若沒有字節對齊,輕則只是影響內存的執行效率,重則會造成程序出現錯誤。因此我們一般可以選擇兩種處理方法:

  • 一字節對齊(內存占用最小,但執行效率最低)
  • 根據平臺要求自己定義字節填充(自己均衡內存空間占用與執行效率)
  • 結論

  • 一般要求結構體成員合理安排位置,其基本的原則就是把結構中的變量按照類型大小從小到大聲明,以節省空間
  • 跨平臺數據結構可考慮1字節對齊,節省空間但影響訪問效率
  • 人為地進行字節填充,可以提高訪問效率,但犧牲一定的內存空間
  • 當需要最大程度的內存訪問效率時,可以選擇最大內存數據類型的倍數進行字節對齊
  • 總結

    以上是生活随笔為你收集整理的关于字节对齐的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。