今天在昆明某知名学府里,旁听一位大学老师讲软件编程。有一位学生问到,32位编程和64位编程有什么区别,该老师的解答模糊且所有人都没听懂。 这里,我用一种简单的方法来解释区别在哪里。 首先声明两个变量。 var s:pchar; ss:pchar; 然后赋值 s:='123'; ss:='1'; 然后查看数据地址 edit1.Text:=inttostr(integer(s)); edit2.Text:=inttostr(integer(ss)); 你会发现两个地址的值相差是4。 然后再赋值 s:='1234'; ss:='1'; 查看数据地址后你会发现两个地址的值相差是8。 然后再赋值 s:='12345'; ss:='1'; 查看数据地址后你会发现两个地址的值相差还是8。 然后再赋值 s:='12345678'; ss:='1'; 查看数据地址后你会发现两个地址的值相差变成12。 为什么呢?我们都知道8位为1个字节,32位即是4个字节。也就是说,32位操作系统,是以4个字节为单位来分配内存,基于32位的编译器,当然也就采用同样的分配方法,而之所有取采这种分法,只是为了取得最佳的工作效率,是根据CPU的处理能力来决定。 也就是说,当赋值 s:='123456789012'; ss:='1'; 查看数据地址后你会发现两个地址的值相差变成16。 我想你已经明白为什么说同频64位CPU会比32位更快了,但是当同频64位CPU执行32位程序时,绝对不会比32位CPU快一丁点。而64位CPU仅仅是在单周期内处理数据长度比32位CPU增加一倍,所以,他们之间的运算速度差距,不会像主频增倍那么多。 注:如果s和ss的赋值相同,则他们的数据地址会相同。 |
用代码看32位和64位的区别
最新推荐文章于 2021-05-17 15:30:14 发布