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呢/?
()()表示要補上的空間]
...全文
37 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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的吗

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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