回覆列表
  • 1 # 使用者3512061044433

    我的理解是你希望只定義一個變數,並且該變數只佔用1bit的記憶體空間,這是沒有辦法做到的,記憶體訪問地址最少也是8bit的整數倍,如果考慮記憶體對齊,在不同位寬的機器上整存整取造成的空間浪費也不少了。畢竟容量使用和間訪效率也是需要權衡的。

    但是如果你有多個位變數,例如你有32個flag,而你希望只用4個byte(理論上4個byte剛好利用所有的bit),C語言支援位操作,你確實可以把多個位變數透過位操作merge到一個位元組長或者字長的變數中去。定義一個宏,把位先移位,然後或或者與就可以了。程式碼很簡單,也可以寫得很規整,很多底層通訊協議就是這麼寫的,x86架構裡有不少專用暫存器,像Flags暫存器,也就是PSW,也是這麼操作的。底層通訊協議這麼做是因為通訊成本高,處理成本低,充分利用各個位承載資料可以加速資料傳輸。

    但是你要是知道的是,即便你用位操作實現了一個變數只佔1bit的空間記憶體,但是背後的訪問操作依然不是bit的級別的,更改或者獲取它的值比處理位元組變數開銷更大,因為你需要事先進行位運算。這就是所謂的處理效率和記憶體空間的權衡。

  • 中秋節和大豐收的關聯?
  • 排水管的型號De110和De100一樣嗎,請解釋一下,謝謝?