sizeof怎麼除了問題阿,大小不對阿

a_mao 2003-12-12 11:56:22
struct BITMAPFILEHEADER
{
WORD bfType; 00()()
DWORD bfsize; 000 0
WORD bfreserved1; 00 00
WORD bfreserved2;
DWORD bfoffBits; 0000
}

這樣sizeof(BITMAPFILEHEADER) 應該是16阿/為甚麼計算出為14呢/?
()()表示要補上的空間]
...全文
15 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
101monster 2003-12-17
呵呵,当然是14,DWORD是两个WORD,总共五个中有两个DWORD,不就等于七个WORD,14个字节嘛!
  • 打赏
  • 举报
回复
chehw 2003-12-17
在定义BITMAPFILEHEADER结构体之前包含了下面这一文件
#include <pshpack2.h>

其中有#pragma pack(2), 把结构体的对齐方式设为了二字节对齐。
  • 打赏
  • 举报
回复
a_mao 2003-12-17
按照常規边界对齐

WORD占两个字节
DWORD占四个字节
struct BITMAPFILEHEADER
{
WORD bfType; //2
/* ...... 2 */
DWORD bfsize; //4
WORD bfreserved1; //2
WORD bfreserved2; //2
DWORD bfoffBits; //4
}
應該是16阿!!
sizeof出來卻是14,是我只知其一不知其二麼/
  • 打赏
  • 举报
回复
bluebohe 2003-12-12
就是16啊,你怎么算出了14的?

首先
#pragma pack(push) //保存对齐状态
#pragma pack(1)


#pragma pack(pop)
这个东西有没有?

其次Alt+F7中的C/C++中的Code Generation中的struct member alignment是不是一个字节?
  • 打赏
  • 举报
回复
zhang_dq 2003-12-12
大小对齐
  • 打赏
  • 举报
回复
golinjin 2003-12-12
就是14啊。你怎么算出16的?WORD=2,DWORD=4
DWORD×2+WORD×3 =14
  • 打赏
  • 举报
回复
hahu 2003-12-12
应该出来16
计算是14
前面加上#pragma pack(1)
这是VC的一种优化
  • 打赏
  • 举报
回复
vcforever 2003-12-12
WORD占两个字节
DWORD占四个字节
struct BITMAPFILEHEADER
{
WORD bfType; //2
DWORD bfsize; //4
WORD bfreserved1; //2
WORD bfreserved2; //2
DWORD bfoffBits; //4
}

()()表示要補上的空間] ? 什么意思?
结构体在定义的时候是不分配空间的,只有定义该结构体对象的时候才分配空间
不知道楼主补上空间是什么意思!
  • 打赏
  • 举报
回复
carbon107 2003-12-12
http://expert.csdn.net/Expert/topic/2168/2168165.xml?temp=.3854029
论坛说过这个问题,看看吧
  • 打赏
  • 举报
回复
bluebohe 2003-12-12
考你们一个问题吧,普通情况下
struct xyz
{
xyz(){x=0;y=0;z=0;};
int x;
int y;
int z;
};
占几个字节?
  • 打赏
  • 举报
回复
crystal_heart 2003-12-12
边界对齐

WORD占两个字节
DWORD占四个字节
struct BITMAPFILEHEADER
{
WORD bfType; //2
/* ...... 2 */
DWORD bfsize; //4
WORD bfreserved1; //2
WORD bfreserved2; //2
DWORD bfoffBits; //4
}
  • 打赏
  • 举报
回复
LuWei103 2003-12-12
你用的是WIN16还是WIN32啊?
  • 打赏
  • 举报
回复
luofeitarget 2003-12-12
边界调整.
如下:

class Concrete1 {
public:
//……
private:
int val;
char bit1;
};

除开其他影响,Concrete1 占8字节。
Concrete1 Object中,为使Object能够符合一个机器的word(32位操作系统中为4字节)边界,必须补充3bytes字节。此称为边界调整。边界调整一般由编译器完成。
  • 打赏
  • 举报
回复
beyondtkl 2003-12-12
HOHO。
  • 打赏
  • 举报
回复
mora 2003-12-12
是16呀,没错。
难道你的程序是win16的吗
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.6w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2003-12-12 11:56
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……