设为首页 加入收藏

TOP

C语言中的int类型的范围(三)
2014-03-10 12:59:50 来源: 作者: 【 】 浏览:259
Tags:言中 int 类型 范围

 

  使用 GCC 编译一下

  gcc -S test_add.c -o test_add.s

  然后查看一下主要代码。

  movl $1, -12(%ebp)

  movl $2, -8(%ebp)

  movl -8(%ebp), %eax

  movl -12(%ebp), %edx

  addl %edx, %eax

  movl %eax, -4(%ebp)

  其中的 ebp eax edx 就是寄存器。

  可以看出,数据先放到栈里,再从栈里放到寄存器里,然后再进行加法运算,最后再从寄存器里把结果放回栈里。

  下面的图是书中给出的一个处理器的抽象视图:

  栈是什么 栈是一种抽象概念,这里的栈就是指内存。

  书里说了,在32位计算机中,这些寄存器的大小就是32位。可见,

  字长与寄存器大小一样

  除此之外,我们可以看到,需要计算的时候,movl 指令将数据从内存中放到寄存器里,由于内存和寄存器是不同的部件,所以需要一个部件来传递数据,这种部件叫做数据总线。

  寄存器的大小与字长相同,那么这种数据总线每次能传送的数据也应该与字长相同,所以:

  字长与数据总线宽度一样

  另外,再想像一下,你想要从内存中取数据出来,总要告诉内存你取的是哪个地址的数据吧,所以,“地址”这个数据也是要从某个地方传送到内存的。只要传递,就需要有部件支持,这个部件叫做地址总线,地址总线传递地址,地址大小与字长一样,那么,我们可以知道:

  字长与地址总线宽度一样

  好了,到了这里,我们的分析就差不多了,总结一下:

  我们由C语言中int类型的大小,得到了字长这个概念,又从字长这个概念寻找了与其相关的一些机器部件的属性。到现在为此,与字长相关的有:

  int 类型

  指针(即内存地址)

  寄存器

  数据总线

  地址总线

  在 Wikipedia 的 Word(computer_architecture) 词条中,我们可以看到自1837年以来,一系列计算机体系结构中与字长相关的一些属性的变化。

  我们再想想,为什么要将这么多种部件都设置成相同长度 我想,可能是因为计算机内部实在太复杂了,各个部件之间需要紧密地配合,共同完成复杂的任务。尤其是数据,需要在各个部件之间传递,如果这些部件之间大小不统一,就会增加机器的复杂度,由于,我们将这些部件大小尽可能统一,进而提出字长这种概念来描述计算机的重要性质。

  到这里,我们再想一下,字长这个概念和这么多部件相关,那么确定字长多大应该不仅仅与内存大小有关系。比如字长代表寄存器的大小,寄存器与机器的运算直接相关,字长变大后,每次能参与计算的值也相应变大,以前我们计算两个很大的数的和时,可能需要动用好几个寄存器,现在咱字长大了,寄存器也大了,只需要两个寄存器就可以了。

  由此可见,字长的确定是一个综合的考量,代表着计算机计算,存储能力的全面提升。

      

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇常用数据结构之Trie树 下一篇OpenGL库编译相关错误

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: