關於C/C++ 結構體字節的算法

簡簡單單的答案,看例子。

本人機器64位,指針8字節;32位,指針4字節。


文件:sizeof.c

#include <stdio.h>

typedef struct SS{
    char    name[131];
    short   type;          
    int     size;          
    int     offset;        
    unsigned short     precision;            
    void    *data;                          
#if 0
}__attribute__ ((__packed__))AA;
#else
}ColAttr_t;
#endif
int main(int argc, char **argv)
{
   printf("%d \n", sizeof(AA));
    return 0;
}

看似 151字節(#if 1 即可看出,attribute 緊湊字節網絡用),實際160字節。

答案:是按照8字節對齊的,因爲void * 是8字節,去掉void * 最大是4字節,即按照4字節對齊


wKioL1XJ2biSLEeWAABBh1IyLyA483.jpg

分析:都是向 8字 節對齊。

    第一行,char cname[128]字節。

    第二行, 剩下3個字節和 short type ,組合佔8字節。(一共佔5字節,餘3 放不下int類型)。

    第三行,int size和 int offset 組合佔8字節。

    第四行,void * 由於64位佔8字節。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章