位元組對齊小談
一時興起,忽然想到陣列與結構到底是什麼關係呢?原本結構和陣列沒什麼聯絡。FORTRAN就出現了陣列的概念,結構是在Algol中出現的,C++開始結構成為定義新的資料型別的主要方式。結構在程式語言中的地位是為了讓使用者可以定義整合在一起的一些量,給這個整體一個名字;而陣列是為了表達能表達一連串相同型別的資料的。(翁愷)
總結了一下陣列與結構的聯絡與區別為以下幾點:
區別:
1、結構的內部成員型別可以不一樣,而陣列是一組型別相同的資料的集合;
2、訪問成員的方式不一樣,陣列用[]運算子,結構用.運算子;
3、運算方式中也有區別,結構可以直接賦值,而陣列不行;
4、指標方式不同:結構變數的名字並不是結構變數的地址,必須使用&運算子;
5、作為函式引數傳入函式,處理方式不同。
聯絡:
1、都可以當全域性變數和區域性變數;
2、結構和陣列都是一個容器,它們的出現都是為了程式設計更簡單,更形象化,滿足不同需求。
既然談到結構,那就必須提到位元組對齊,為了能夠更明白的說清楚位元組對齊這個概念,通過模擬實現形象說明,讀者可以自行模擬驗證。
(1)按1位元組對齊
(2)按2位元組對齊
(3)按4位元組對齊
(4)按8位元組對齊
(5)改變結構成員變數型別進行驗證
(6)再驗證說明
解釋說明:
編譯器中可以設定,本例結構體有char(1個位元組)、short(2個位元組)、int(4個位元組)、double(8個位元組):
1、#pagma pack(1)表示按照1位元組對齊,則結構體中成員之間是連續的,相鄰成員地址的差等於相鄰成員的sizeof,自然而然,結構體的sizeof正好等於全部成員的sizeof之和。
2、#pagma pack(2)、#pagma pack(4)、#pagma pack(8)分別表示按照2位元組、4位元組、8位元組對齊,則結構體中成員之間是不連續的,相鄰成員地址的差也不等於相鄰成員的sizeof,自然而然,結構體的sizeof也不等於全部成員的sizeof之和。對於2個位元組對齊,char需要再補1個位元組,組成2個位元組;而是2個位元組的整數倍的型別則沒有關係;對於4個位元組對齊,char補足兩個位元組,再與short組成4個位元組;對於8個位元組對齊,char補足兩個位元組,再與short組成4個位元組,再與int組成8個位元組。所以三種結果正好是一致的。
3、驗證(1):將int型改為short型,將double型改為int型,用4位元組對齊方式,char補足兩個位元組,再與第一個short組成4個位元組;第二個short需要補2個位元組,組成4個位元組;所以結構體最後結果是12個位元組。
4、驗證(2):結構體中改為char、int、int、double。最後結果為24個位元組。驗證正確,根據結果想想為什麼?想明白了說明你理解了。共勉!
相關文章
- 位元組對齊
- golang 位元組對齊Golang
- C++ 位元組對齊C++
- 淺談虛擬函式表與位元組對齊函式
- <摘錄>位元組對齊(強制對齊以及自然對齊)
- c/c++ 位元組對齊C++
- 記憶體位元組對齊記憶體
- 【C/C++】5.位元組對齊和位元組填充C++
- iOS 記憶體位元組對齊iOS記憶體
- 【C++】C++的位元組對齊C++
- <摘錄>位元組對齊與結構體大小結構體
- C/C++ 結構體位元組對齊詳解C++結構體
- C語言:記憶體位元組對齊詳解C語言記憶體
- C/C++—— 記憶體位元組對齊規則C++記憶體
- 點陣圖四位元組對齊問題
- linux 改變GCC編譯器的位元組對齊方式LinuxGC編譯
- 【編譯製導指令】#pragma pack - 位元組數基準對齊編譯
- c++記憶體中位元組對齊問題詳解C++記憶體
- 1分鐘瞭解C語言正確使用位元組對齊及#pragma pack的方法C語言
- 【小技巧】CSS文字兩端對齊CSS
- 淺談位元組碼增強技術系列1-位元組碼增強概覽
- JVM 層對 jar 包位元組碼加密JVMJAR加密
- Powerpoint技巧:快速對齊小數點
- 大端序、小端序、網路位元組序
- js獲取字串位元組數方法小結JS字串
- 分享:大端小端-位元組儲存順序
- 位元組豆包、武大提出 CAL:透過視覺相關的 token 增強多模態對齊效果視覺
- 快手遊戲:版圖成形,對標位元組遊戲
- 難對齊、難保障、難管理?一文了解位元組跳動如何解決資料SLA治理難題
- 位元組流
- 網路通訊時位元組序轉換原理與網路位元組序、大端和小端模式模式
- 對線面試官 | 位元組跳動一面面試
- Java 位元組碼Java
- 理解位元組序
- 位元組碼指令
- 對,遊戲公司都是位元組跳動(核心)合作伙伴遊戲
- wps表格中如何實現小數點對齊?
- 記一次微信小程式轉位元組跳動小程式的經驗微信小程式