短整形在计算机中也是占四个字节???
如果你怀疑,请打开一个编辑器,写几行c,输出一个短整型占用的字节数。要比你看文字记忆的深。86和64都试试
字是 word 有些时候,
它表示计算机(CPU)寄存器长度,即字长
有些CPU是按照字长编址的。
也就是一个地址单元,可以存储,一个寄存器所能容纳的Bits数。
这样的计算机(CPU),
寄存器不论有多少Bits,
总是一次(至少)读取一个 字长的数据。
所以它的内存,也没有必要按照 字节编址。
实际上 intel 486 586 以后,每次读写数据,都不止一个字节,但是他的地址,还是按照字节编址的
因为
1)他有能力,按照字节读写
2)为了兼容早期的CPU字节模式
3)它的代码,是不定长的,以字节为单位的
至于对齐方式,
1)编译的时候,是可以设置的
2)某些CPU,强制按照一定长度对齐,不对齐出错。
3)cache 同样 对对齐数据读写效率更高。
4)32Bits 代码,通常按照4Bytes对齐,也可能按照8 Bytes 对齐,64Bits通常按照 8Bytes 对齐。
int a=3 不能说3是4字节,而是把3放在一个4字节的盒子里。
基于 X86 ,包括 X64系列 CPU的 x86 家族
地址单元,总是按照 字节计算的。 也就是数 第一个 字节编号 0 ,第二个编号1,以此类推
32Bits CPU 可寻址空间4G,
最高地址单元是0xFFFFFFFF 这个位置 intel CPU X86以及兼容CPU,
是用来存放开机启动代码的
sizeof 得到的就是 字节数
有的CPU 地址单元不是按照字节编码的
而是按照寄存器(累加器和其他通用寄存器长度)编址的
16Bits CPU 每个地址单元,16Bits
32Bits CPU 每个地址单元,32Bits
这样就不能寻址,每个字节
只能按照字长寻址
地址编号,
也是 0 表示 第一个 16Bits(32Bits) ,
1表示第二个 ....
这时候,只要 sizeof 可以得到字节数,
那么sizeof (X),就比一个字节要多
1个字节的数据,也就不是仅仅占用一个字节了。