答:char型变量占1个字节,int型的变量占2个字节,long型占4个字节。int型在TC里占2个字节,在VC字节里占4个字节。因为TC模拟的是16位dos操作系统,VC模拟的是32位操作系统。
(9)再次对程序5进行研究,找到每一条c语句对应的汇编代码。
Struct n a;
Int b;--------------------sub sp,6
a=func();----------push ss;
push bx;
call 0266;
push ds;
Push ax;
mov cx,6;
Call 076a:1085;
b=f(a);------------lea bx,[bp-6]
Mov dx,ss
Mov ax,bx
Mov cx,6
Call 076a:10a1
Call 256
Printf(“%d”,b);---mov si,ax
Push si
mov ax,194;
Push ax
Call 093a
Printf(“%d”,f(func()));---call 266
Mov dx,ds
Mov cx,6
Call 076a:10a1
Call 256
Add sp,6
Push ax
Mov ax,198
Push ax
Call 93a
Func():
Struct n a;-----------sub sp,6
a.a=1;----------------mov word ptr [bp-6],1
a.b=2;----------------mov word ptr [bp-4],2
a.c=2;----------------mov word ptr [bp-2],3
Return a;-------------mov bx,426
Push ds;
Push bx;
Lea bx,[bp-6]
Push ss;
Push bx;
Mov cx,6
Call 076a:1085
(10)全局变量、局部变量存储方式的不同有什么普遍的意义?
答:我们把这里的局部变量理解为动态局部变量。全局变量的存储空间是固定的,局部变量是动态分配的,他们的存储方式决定了他们的特点:1、作用域。全局变量在该程序所有地方都可以使用,局部变量只能在定义的函数里使用。2、生命周期。全局变量的生命周期和整个程序是一样的,而局部变量的生命周期与函数一样,函数结束即释放。这种方式更有利于减小程序的内存开销,避免变量定义出错,保证函数的独立性,使程序模块化,方便编写和调试。
全局变量放在数据段中,局部变量放在栈段中。比如一个程序有100个函数,每个有5个局部变量,如果都放在数据段中,就会造成内存开销太大,不好管理和调用,所以要用栈段来存放局部变量,这就是高级语言的核心机制。
3、研究总结本章研究了函数的各种类型的变量的存储方式,是比较重要的一章。