这个结构体在VC6下为什么是16个字节???????????????

jiangdamalong 2006-03-21 07:38:33
typedef struct tagBITMAPFILEHEADER
{
unsigned short int type;/*文件类型是否为BMP文件*/
unsigned long size;/*文件大小,以字节为单位*/
unsigned short int reserverd1;/*文件保留字,必须为0*/
unsigned short int reserverd2;/*文件保留字,必须为0*/
unsigned long offset;/*文件头的偏移量表示,以字节为单位*/
}BITMAPFILEHEADER;/*14个字节*/

超级不解
...全文
94 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanlong 2006-03-21
  • 打赏
  • 举报
回复
type和size之间有2个字节的空洞.为了对齐,以结构体里最长数据类型的为标准.
BrewStian 2006-03-21
  • 打赏
  • 举报
回复
内存分配以4个字节为单位的,剩两个字节不够分配size,又去申请了4个字节
yanlong 2006-03-21
  • 打赏
  • 举报
回复
联合体是最大的一个成元所占内存。
所以
int 2字节
short int 2字节
long 4字节
自己一加就是了。
yanlong 2006-03-21
  • 打赏
  • 举报
回复
结构体所占内存是各成元之和
jixingzhong 2006-03-21
  • 打赏
  • 举报
回复
typedef struct tagBITMAPFILEHEADER
{
unsigned short int type;/*文件类型是否为BMP文件*/
//下面的变量因为对齐,中间空了两个字节 ...
unsigned long size;/*文件大小,以字节为单位*/
unsigned short int reserverd1;/*文件保留字,必须为0*/
unsigned short int reserverd2;/*文件保留字,必须为0*/
//下面的变量对齐,刚好位于合适的位置,没有填充 ...
unsigned long offset;/*文件头的偏移量表示,以字节为单位*/
}BITMAPFILEHEADER;/*14个字节*/

所以一共 14 + 2 (填充空间) = 16
citywanderer2005 2006-03-21
  • 打赏
  • 举报
回复
楼上正解,关于sizeof(struct),可以看看我的blog:http://spaces.msn.com/citywanderer/

“sizeof(struct)解析”
csy_2002 2006-03-21
  • 打赏
  • 举报
回复
http://ywhglh.blogchina.com/1994936.html
有详细解析
jixingzhong 2006-03-21
  • 打赏
  • 举报
回复
内存对齐 ...
duduhaha 2006-03-21
  • 打赏
  • 举报
回复
type和size之间有2个字节的空洞.为了对齐,以结构体里最长数据类型的为标准.

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧