社区
C语言
帖子详情
奇怪,怎么多出两个字节?
sizheng0320
2006-03-02 09:53:12
struct T_BITMAPFILEHEADER { // bmp文件头
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
};
上面这个结构体,自己数出来以及文件中实际的都是14个字节,可是为什么sizeof得到的是16个字节啊????
...全文
171
13
打赏
收藏
奇怪,怎么多出两个字节?
struct T_BITMAPFILEHEADER { // bmp文件头 WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; }; 上面这个结构体,自己数出来以及文件中实际的都是14个字节,可是为什么sizeof得到的是16个字节啊????
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
姜湖成哥
2006-03-02
打赏
举报
回复
是字节对齐,在深入理解计算机系统那本书中说了,WORD两个字节,那么它后面的DWORD 4个字节就要在前面空两个出来,形成DWORD是从4的倍数开始;然后后面的两个WORD分别是两个字节,共4个字节;而最后一个DWORD恰好从4的倍数开始;所以共16个字节了。
jinjiajie
2006-03-02
打赏
举报
回复
字节对齐,编译器设置一下好了...
du51
2006-03-02
打赏
举报
回复
可是为什么sizeof得到的是16个字节
按四个字节读的.不足的补齐.
4*4=16>14
呵呵,刚好.
zez
2006-03-02
打赏
举报
回复
字节对齐...
最最基本的东西了.. 看看书先.. 或者google一下..
就在这里都讨论的百八十遍了...
alen_ghl
2006-03-02
打赏
举报
回复
字节对齐问题(编译器为了提高变量存取速度)
你可以在定义结构体前加上
#pragma pack(push,1) // 一字节对齐
strcut ......
...
#pragma pack(pop)
这样就会就会是你所希望的字节数了
关于字节对齐的具体问题,自己到网上搜索一下,好多
aa3000
2006-03-02
打赏
举报
回复
叫什么位数对齐
du51
2006-03-02
打赏
举报
回复
这个设到2就行了.越小时间越长.
jixingzhong
2006-03-02
打赏
举报
回复
对齐到 1 的话
在程序前使用
#pragma pack(push,1)即可
iamcaicainiao
2006-03-02
打赏
举报
回复
study.
jixingzhong
2006-03-02
打赏
举报
回复
这个是系统默认的情况下的结果,
也有的人希望节省空间,
强制对齐到 1 ,
也就是没有任何的填充,
那么,
结构体的大小就是 14 了 ~
jixingzhong
2006-03-02
打赏
举报
回复
字节对齐:
struct T_BITMAPFILEHEADER { // bmp文件头
WORD bfType; //0到1 两个字节
DWORD bfSize; //由于对齐,从4开始,4.5.6.7四个字节
WORD bfReserved1; //8 .9 两个字节
WORD bfReserved2; //10 . 11两个字节
DWORD bfOffBits; //12 .13 .14. 15 四个字节
}; //共 0 - 15 是16个字节,对齐到 4 (变量align)还是16
所以结果是 16 个字节!!
pagechen
2006-03-02
打赏
举报
回复
为什么有内存对齐?
提高内存读写效率。
现在的memory都有带宽多少位和总线多少位的说法。比如32位系统,硬件设计时为了节约导线,只能按32位的整数倍去选取地址读写,而不能直接读取任意的32位。
就像N个仓库,每个仓库为32个货位。
WORD bf1;
DWORD bf2;
WORD bf3;
WORD bf4;
DWORD bf5;
如何存放?
方案1:把bf1和bf2的前半放在仓库1,bf2后段和bf3方在仓库2 。。。。
方案2:把bf1放在仓库1,bf2放在仓库2,bf3 和bf4放在仓库3。。。。。
现在需要提货bf2,比较两个方案:
1。从仓库1提出一部分,再从仓库2提出另外的部分
2。从仓库2提取
方案2类似于内存对齐到4的情况
逸学堂
2006-03-02
打赏
举报
回复
楼上正解
int 类型究竟多少
字节
?
今天发现NEON技术中 int类型的
字节
数是2,感觉很
奇怪
,最早写51单片机时也是2,后来到了观念转变成了4,现在有遇到了2. 一、转自 http://www.tuicool.com/articles/6j2uqi2 最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个
字节
。后来,查了The C Programming language这本书,
Java中一个汉字究竟占几个
字节
?
因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码,连大陆和台湾这样只相隔了150海里,使用着同一种语言的兄弟地区,也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字,就必须装上一个"汉字系统",专门用来处理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持 BIG5 编码的什么"倚天汉字系统"才可以用,装错了字符系统,显示就会乱了套!但是,对于某些特殊的、不常用的字符,UTF-16会用四个
字节
来表示。
为什么TCP报文段的最大数据荷载是65495
字节
?
首先这是个误区,,TCP报文段并不是指在TCP层封装的数据,,,它事实上是在IP层封装的(但是好像一般称呼数据报为运输层),, IP层中有两种数据表现, 一种是 报文段 最小数据长度为1460
字节
最大数据长度为65495
字节
一种是 报文分片(报文分段) 长度 65495
字节
是由于 数据报的长度是由
两个
字节
的标识决定的,其最大长度为65535
字节
,然后又需要封装TCP报头(至少20
字节
) 和ip头(至少20
字节
) 所以最大长度为65495
字节
...
c语言中用
两个
n表示什么格式,C语言中‘\n'为什么能表示CRLF
两个
字节
为什么要说这个简单的问题?众所周知,在Windows下文本文件的换行符是CRLF,占
两个
字节
。在Unix下是LF,占一个
字节
。(还有奇葩的Mac是CR)。但是C语言中直接printf一个 ‘\n’,在Windows下就是CRLF
两个
字符,然后getchar读入,又成了’\n’这一个字符。这不是有点
奇怪
吗?大多脚本语言还有Java中,‘\n’就是LF一个
字节
,ASCII码是10。先普及一个历史故事计...
GB2312 英文 几个
字节
字符集的问题
字符集的问题 不分享无用的东西 此类问题包括: GB2312英文字符几个
字节
GBK中的英文字符占用一个
字节
还是
两个
字节
???占几个
字节
要明确一下的概念,方便长期记忆 字符集是干嘛的.? 字符集是标识存储于计算机中的数据的格式的集合 这么说显得很枯燥,而且说定义也很难理解 实际上可以理解为字符集是为了: **解决中国跟外国的文字的不同而存在的**(方便理解) 在java中,很多人问...
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章