C語言結構體類型佔用的內存空間,需要考慮字節對齊

結構體類型佔用的內存空間的計算方法:

首先需要確定是在32位系統,還算在64位系統

    是所有成員的內存的和,但是需要注意,默認情況下是按照32位4字節對齊的,64位系統是根據最大變量的長度確定對齊的,如果最長數據爲8字節,則8字節對齊,如果最長數據爲4字節,則4字節對齊
    32系統4字節對齊時,如下分析:
    每行4個字節,字符數據按照一個一個的存儲;short型數據按照2個字節2個字節的存儲;int和folat,以及long,double按照4個字節4個字節存儲
    64位系統4字節對齊時,和32位系統一樣。
    64位系統8字節對齊是,如下分析:
    每行8個字節,字符數據按照一個一個的存儲;short型數據按照2個字節2個字節的存儲;int和float,按照4個字節4個字節的存儲,long和double型按照8個字節8個字節的存儲
    只有結構體中有2個以上的數據時,才考慮對齊問題,如果只有一個,這個類型長度是多少,結構體長度就是多少
    **只有在有2個以上成員時才需要對齊,對齊時按照最長類型對齊,但是也需要考慮系統的位數,如果是32位系統,最多4字節對齊,如果64位系統,按照最長類型的字節數對齊

    *結構體和共用體指針的長度在32位系統上是4,在64位系統上是8

     *如果是32位,最多32位,4字節對齊,
     *如果是64位,最大對齊位數是結構體中最長的數據類型,不受64位系統長度的限制,比如可以按照long double 16位對齊

發佈了34 篇原創文章 · 獲贊 57 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章