📄 subject_47428.htm
字号:
<p>
序号:47428 发表者:sames 发表日期:2003-07-21 08:46:18
<br>主题:关于sizeof()涵数的问题,在线给分
<br>内容:typedef struct DHUDPHEAD<BR>{<BR> BYTE ProtType; <BR> WORD TxNo;<BR><BR><BR>}DHUDPHEAD;<BR><BR> char str[20];<BR> wsprintf(str,"Len:%d",sizeof(DHUDPHEAD));<BR> MessageBox(str);<BR>计算的结果为什么不等于3而是等于4
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:lijb 回复日期:2003-07-21 09:29:31
<br>内容:好像,内存对齐的原因,VC默认4位,你可以修改内存的对齐方式。#pragma pack (n)<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:lijb 回复日期:2003-07-21 09:36:38
<br>内容:不好意思,我说不对,我实验了一下。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Merlin 回复日期:2003-07-21 10:10:17
<br>内容:VC中对struct取sizeof要看成员的类型,它是跟字节大的对齐的,如果将WORD换成DWORD则sizeof为8
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鸢飞鱼跃 回复日期:2003-07-21 10:30:54
<br>内容:好像不对啊,sizeof(WORD) = 2 <BR>高手来看看怎么回事儿
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:秋叶禅 回复日期:2003-07-21 10:36:19
<br>内容:WORD本来就是2个字节啊。<BR>DWORD4个字节。<BR>typedef struct DHUDPHEAD<BR>{<BR> BYTE ProtType; //1个字节<BR> WORD TxNo; //2个字节<BR><BR><BR>}DHUDPHEAD;<BR>sizeof(DHUDPHEAD));//=4是对的,就是MERLIN说的字节对齐。<BR><BR>//VC中对struct取sizeof要看成员的类型,它是跟字节大的对齐的,如果将WORD换成DWORD则sizeof为8 <BR>赞同!<BR><BR><BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:秋叶禅 回复日期:2003-07-21 10:41:39
<br>内容:(zt)计算结构变量的大小就必须讨论数据对齐问题。为了CPU存取的速度最快(这同CPU取数操作有关,详细的介绍可以参考一些计算机原理方面的书),C++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但理论上速度快了。当然这样的设置会在读写一些别的应用程序生成的数据文件或交换数据时带来不便。结合你的这个结构,每个char是一个字节,short是2个字节,而int是4个字节,这样加起来应该是14个字节,可是sizeof返回为16个字节,这就是因为数据对齐,整个数据变量占据了16个字节,而其中只有14个字节存放数据,例外2个字节浪费了。<BR>2003-7-21 10:42:13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -