簡簡單單的答案,看例子。
本人機器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字節對齊。
分析:都是向 8字 節對齊。
第一行,char cname[128]字節。
第二行, 剩下3個字節和 short type ,組合佔8字節。(一共佔5字節,餘3 放不下int類型)。
第三行,int size和 int offset 組合佔8字節。
第四行,void * 由於64位佔8字節。