中,而非堆栈段。在这个语句中,用了地址
0lA6和0IA7来存放 1。地址01A6和0lAY
就是变量a的存储空间。若源程序:
inta;
main(){}
则变量a也存在于内存数据段中。
C语言变量 例6:对子函数中带有一个static型变
量的程序进行分析。
曹党生 太原理工大学 voidf(){staticinta;a-l;}
voidmain(){f();}
从而腾出si的空间,让si暂时作为变量a的 对其产生的应用程序反汇编后,可以
通过把 C语言程序转换成汇编语言,并分析 存储空间; j找到调用子函数f()的5行汇编代码:
相应的汇编语 句,直观地获知 了变量的5种 (2)语句movsi,0001完成赋值a 1。 push bp
存储类型的表现形式 ;并探讨 了如何设置变 由于直接使用CPU中的寄存器si代表 mov bp,sp
量的存储类型和数据类型才能得到更优化的 变量a,而不是使用内存空间代表变量a,从 movwordptr0【1A6】,0001
程 爵 而使 CPU对变量a的操作速度远远超过 内 pop bp
存变量的操作速度 。 , ret
变量 ;存储 类型 ;数据类型 例 3:对带有4个register变量的程序 可以看出:调用了函数f()后,通过传
进行分析。 送语句movwordptr 0【1A6】,0001完成
main(){registerinta-1,b=2,c 3, a l的赋值。但在子程序返回 (语句ret表
由于C语言通过编译,转换成机器语 d 4; 示子程序返回)时,地址01A6和01A7并
占后,才能被 CPU执行,所以要掌握好C 对其产生的应用程序反fL编后,可以 没有释放,说明静态变量的生命周期与整
语言,就需要了解 C语言的语句转变成机 找到如下7行有关变量a、b、C、d的汇编 个程序的生命周期相同。
器语言之后的情况。下面通过对变量的存 代码 :