程序的内存映像

        计算机程序在运行时,操作系统首先要将存放在外存储器(硬盘)上的可执行文件代码装载到计算机的内存中,然后运行内存中的程序代码。所以要聊程序的运行情况,只要看内存中的程序代码是怎么运行的就可以了。

       程序代码装载到内存中后,占据了内存的一块区域,操作系统控制执行该区域中的代码。该区域的代码全部执行完后,程序就运行完毕。此时,操作系统会将该区域重新作为内存的空闲空间。

       装载到内存中的程序代码区域称为程序的内存映像,其按存放的内容可以分为3个区。

(1)程序区:存放程序指令的区域。

(2)静态存储区:存放永久数据区域。

(3)动态存储区:存放临时数据的区域。

    这里说的永久数据,是指从程序开始运行一直到程序运行结束始终存在的数据,临时数据是指程序运行的某个阶段存在和使用的数据,过了这个阶段,该数据就被删除了。

   这里说的数据,其实是占据了内存空间的变量或数组。数据删除就是该变量或数组撤销,所占据的内存空间作为空闲空闲。

     在程序运行结束时,除了使用内存映像中的指令和数据外,还涉及CPU的使用。所以我们在分析程序运行时,还考虑CPU。

     程序的内存映像如图所示:

       到目前为止,我们学过的变量和数组有的属于永久数据,如全局变量和全局数据,有的属于临时数据,如局部变量,局部数组及动态变量和动态数组;

      全局变量一定是永久数据,它一定伴随程序的始终。动态变量一定是临时数据,他在运行时才由语句产生,并且由语句,局部变量可以是永久数据也可以是临时数据,之而取决于局部变量的前缀。若前缀为static表明是永久数据,称为静态数据;若前缀为auto表明是临时数据,称为自动数据;若没有折现前缀,则默认为是auto,即自动数据。函数的形参是自动数据。

        全局变量也可以有前缀static,仍然是永久数据。

       静态存储区还可以分为常量区静态变量区动态存储区还可以分为栈区堆区,   常量都放在常量区,全局变量和静态变量存放在静态变量区。自动变量(包括函数形参)存放在栈区,动态变量存放在堆区。栈区的大小有限,但是堆区的空间非常大,适合开辟大容量的数组。

       在多任务的操作系统下,程序区,静态存储区和动态存储区可以不再连续的空间,但是为了方便起见,我们将它看成连续空间中的3个空间。

二、register类型

     CPU中的寄存器主要用于各种操作,包括这些寄存器是一先具有运算功能的存储单元。因为寄存器在CPU中又具有运算功能,并且其硬件的存储速度也比内存中的存储的单元的存储速度快的,所以当数据用寄存器保存时,显然效率更高。但是CPU中的寄存器数量少,而且都有相应的操作用途,所以一般不作为存储数据的单元来使用。但是有时候计算机操作所使用的的存储器不多,寄存器有多余,此时如能充分利用这些多余的寄存器存储数据以提高运行效率,也是一件好事。

       为了在坑的情况下使用多余的寄存器存储数据,我们可以用前缀register将频繁使用的变量定义成寄存器变量。这样在程序运行时,若有多余的寄存器,将会作为该变量的存储单元使用,若无多余寄存器,则依然使用内存中存储单元。


  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值