编译原理/优化

1: 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗?

2: 编译中的问题:全局变量如int i=5; int*(pf)()=foo; 分别在何时被初始化?设计时候如何具体的实现。

ANS:=====================================================================

关于全局变量的初始化,C语言和C++是有区别的。   
 
   在C语言中,只能用常数对全局变量进行初始化,否则编译器会报错。      
  在C++中,如果在一个文件中定义了int   a   =   5;要在另一个文件中定义int   b   =   a;的话,前面必须对a进行声明:extern   int   a;否则编译不通过.   即使是这样,int   b   =   a;这句话也是分两步进行的:在编译阶段,编译器把b当作是未初始化数据而将它初始化为0;在执行阶段,在main被执行前有一个全局对象的构造过程,int   b   =   a;被当作是int型对象b的拷贝初始化构造来执行。   
  其实,准确地说,在C++中全局对象、变量的初始化是独立的,如果不是象int   a   =   5;这样的已初始化数据,那么就是象b这样的未初始化数据。   
  而C++中全局对象、变量的构造函数调用顺序是跟声明有一定关系的,即在同一个文件中先声明的先调用。对于不同文件中的全局对象、变量,它们的构造函数调用顺序是未定义的,取决于具体的编译器。

=========================================================

3: 编译中display表的一些问题

4: 把Switch()case…语句翻译成三元组。

5: C语言参数的入栈顺序?为什么这么实现?

6: 32bit,64bit,两个平台上complier,linker,os kernel,library,debuger的性质

7:优化下面的程序
(0)sum=0
(1)I=1
(2)T1=4*I
(3)T2=address(A)-4
(4)T3=T2[T1]
(5)T4=address(B)-4
(6)T5=4*I
(7)T6=T4[T5]
(8)T7=T3*T5
(9)sum=sum+T6
(10)I=I+1
(10)IF I<20 GOTO (2)

7:全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 
Ans:全局变量的生命周期是整个程序运行的时间,而局部变量的生命周期则是局部函数或过程调用的时间段。其实现是由编译器在编译时采用不同内存分配方法。全局变量在main函数调用后,就开始分配,如果是静态变量则是在main函数前就已经初始化了。而局部变量则是在用户栈中动态分配的(还是建议看编译原理中的活动记录这一块)

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值