简简单单的答案,看例子。
本人机器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字节。
本文出自 “自己简单总结” 博客,请务必保留此出处http://2714254.blog.51cto.com/2704254/1683780
原文地址:http://2714254.blog.51cto.com/2704254/1683780