在32的CPU上,为什么Windows定义的WORD是两个字节,DWORD是四个字节呢?

lemonasia 2007-04-29 05:15:01
我记得上课的时候老师讲过,在32位的计算机上字长就应该是32,表示了一个字的大小,那么一个字就应该是4个字节。可我看MSDN里定义的WORD是两个字节,而DWORD是四个字节,要按上面那样分析,在现在的32位操作系统上(Windows XP),WORD应该定义为四个字节,DWORD应该定义为8个字节才对啊!

有人知道这是为什么吗?
...全文
896 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
信徒5257 2007-04-30
  • 打赏
  • 举报
回复
WORD和DWORD确实只是微软定义的两个类型。它是我们所学过的字和双字的实现。

但你只要看一下宏的定义就会知道,
typedef unsigned short WORD;
typedef unsigned long DWORD;

unsigned short和unsigned long是根据C标准定义的。这个与系统是32位,还是16位无关。与是否使用的是微软的编译器也无关。


但在实际的处理中,不同的硬件系统下要考虑数据对齐问题。
前面我有数据对齐的介绍。建议你从网上查一下相关资料,会有更多的了解。
zaodt 2007-04-29
  • 打赏
  • 举报
回复

呵呵,依我看,这是一个历史遗留问题。

因为,在16位机的时候,WORD 为2个字节的,这个是没有问题的;

等发展到32位机的时候,为了兼容以前的程序移植,所以 WORD 还保留为2个字节,而定义 DWORD 为正常的4个字节。

都是兼容惹得祸,但是,不兼容又不行!
信徒5257 2007-04-29
  • 打赏
  • 举报
回复
这个是编程语言的标准定义啊。一个字节就是8位。一个字就是两个字节,也就是16位。DWORD当然就是4个字节32位。这个与设备环境和编程的具体语言无关。

为了适应32位机器的需要。在windows操作系统中,以32位为例。它为了加快数据处理速度,有了数据对齐的概念。比如说,你定义了一个结构
struct MyChars
{
char a;
char b;
}
本来char变量只有一个字节,但你考察sizeof(MyChars)就会发现是4。这就是数据对齐。对于不足32位的数据来说,windows会给它分配32位的空间,来提高处理速度。但附加的两位是不需要处理的。



zdleek 2007-04-29
  • 打赏
  • 举报
回复
WORD = 2 BYTES
BYTE = 8 BITS
->16 BITS
WingForce 2007-04-29
  • 打赏
  • 举报
回复
机器字长的概念与WORD的定义无关
菜牛 2007-04-29
  • 打赏
  • 举报
回复
就是为了避免不同的机器有不同的长度,才使用了这样的定义。这是从16位计算机时代遗留下来的,当时一个字长(WORD)就是16位,所以使用short来作为WORD。
systemthink 2007-04-29
  • 打赏
  • 举报
回复
这个不能一概而论,要看你在什么环境下!!

不同的编译环境有可能是不同的!
wujiabao 2007-04-29
  • 打赏
  • 举报
回复
因为是这个样子的

typedef unsigned short WORD;
typedef unsigned long DWORD;

不要说是32的U是这样,64也是这样
lemonasia 2007-04-29
  • 打赏
  • 举报
回复
非常感谢大家!我发现主要是两种观点:

一种是Windows最初设计时还使用的是16位CPU,所以将WORD设计为两个字节,DWORD设计为四个字节,后来为了移植和兼容的考虑将这个继承了下来,到32位CPU上也没有做改变。

另一种是这个WORD和DWORD的定义,和我们所学的字,双字根本就不是一回事儿。只是微软为两个字节和四个字节的数据类型做定义的一个名字。

不知道哪种观点是正确的。。。

16,549

社区成员

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

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

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