编译原理题集
编译原理题库

编译原理题库
1. 什么是编译原理?
编译原理是研究将高级程序语言翻译成为机器语言的原理和方法的学科。
2. 编译器的主要功能是什么?
编译器的主要功能包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。
3. 什么是词法分析?
词法分析是将输入的字符流转化为标记流的过程。
4. 什么是语法分析?
语法分析是将词法分析得到的标记流转化为语法树的过程。
5. 什么是语义分析?
语义分析是对语法树进行解析,检查程序中是否存在语义错误或不符合语言规范的地方。
6. 什么是中间代码生成?
中间代码生成是将语义分析得到的语法树转化为中间表示形式,以便进行后续的代码优化和目标代码生成。
7. 什么是代码优化?
代码优化是对中间代码进行优化,以提高程序的执行效率和空间利用率。
8. 什么是目标代码生成?
目标代码生成是将优化后的中间代码转化为机器语言的过程。
9. 什么是语法制导翻译?
语法制导翻译是一种以语法规则为基础,通过对语法树的遍历和语义规则的应用来进行翻译的方法。
10. 什么是LL(1)文法?
LL(1)文法是一种上下文无关文法,它具有左递归和左因子的特点,并且在进行预测分析时每个非终结符的每个可能产生式都有唯一的选择。
编译原理复习题

编译原理复习题一、选择题1、编译原理是对(C)。
A、机器语言的执行B、汇编语言的翻译C、高级语言的翻译D、高级语言程序的解释执行2、(A)是一种典型的解释型语言。
A.BASIC B.C C.FORTRAN D.PASCAL3、把汇编语言程序翻译成机器可执行的目标程序的工作是由(B)完成的。
A. 编译器B. 汇编器C. 解释器D. 预处理器4、用高级语言编写的程序经编译后产生的程序叫(B)A.源程序 B.目标程序C.连接程序D.解释程序5、(C)不是编译程序的组成部分。
A.词法分析程序B.代码生成程序C.设备管理程序D.语法分析程序6、通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。
A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器7、编译程序绝大多数时间花在(D)上。
A.出错处理B.词法分析C.目标代码生成D.表格管理8、源程序是句子的集合,(B)可以较好地反映句子的结构。
A. 线性表B. 树C. 完全图D. 堆栈9、词法分析器的输出结果是(D)。
A、单词自身值B、单词在符号表中的位置C、单词的种别编码D、单词的种别编码和自身值10、词法分析器不能(D)A. 识别出数值常量B. 过滤源程序中的注释C. 扫描源程序并识别记号D. 发现括号不匹配11、文法:G:S→xSx | y所识别的语言是(D)。
A、xyxB、(xyx)*C、x*yx*D、x n yx n (n≥0)12、如果文法G是无二义的,则它的任何句子α(A)A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同13、正则文法(A)二义性的。
A. 可以是B. 一定不是C. 一定是14、(B)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。
编译原理试题集33493

第一章引论一.单项选择题1. 如果一个编译程序能产生不同于其宿主机的机器代码,则称它为:___________________ 。
a. 诊断编译程序b. 优化编译程序c. 交叉编译程序d. 可变目标编译程序2. 编译程序将高级语言程序翻译成_________ 。
a. 机器语言程序或高级语言程序b. 汇编语言或机器语言程序c. 汇编语言程序或高级语言程序d. 中间语言程序或高级语言程序3. 下面的四个选项中,__________不是编译程序的组成部分。
a. 词法分析程序b. 代码生成程序c. 设备管理程序d. 语法分析程序4. 现代多数实用编译程序所产生的目标代码都是一种可重定位的指令代码,在运行前必须借助于一个_______把各个目标模块,包括系统提供的库模块连接在一起,确定程序变量或常数在主存中的位置,装入内存中制定的起始地址,使之成为一个可运行的绝对指令代码的程序。
a. 重定位程序;b. 解释程序;c. 连接装配程序;d. 诊断程序;5. 从编译程序的角度说,源程序中的错误通常分为________两大类。
a. 词法错误和语法错误;b. 语法错误和语义错误;c. 编辑错误和诊断错误;d. 词法错误和语义错误;6. 下面对编译原理的有关概念正确描述的是:____。
a. 目标语言只能是机器语言b. 编译程序处理的对象是源语言。
c. Lex是语法分析自动生成器d. 解释程序属于编译程序7. 目标代码生成阶段所生成的目标代码的形式不可能是____。
a. 绝对指令代码b. 可充定位的指令代码。
c. 汇编指令代码d. 三地址代码8. 语义错误是指源程序中不符合语义规则的错误,不包括:____a. 非法字符错误b. 类型不一致错误。
c. 作用域错误d. 说明错误解答:1.2.3.4.5.6.7.8.二.填空题1. 对编译程序而言,输入数据是________________;输出数据是_____________。
编译原理试题汇总 编译原理期末试题(8套含答案 大题集)

编译原理考试题及答案汇总一、选择1.将编译程序分成若干个“遍”是为了_B__。
A . 提高程序的执行效率B.使程序的结构更加清晰C. 利用有限的机器内存并提高机器的执行效率D.利用有限的机器内存但降低了机器的执行效率2.正规式 MI 和 M2 等价是指__C__。
A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。
C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等3.中间代码生成时所依据的是 _C_。
A.语法规则 B.词法规则 C.语义规则 D.等价变换规则4.后缀式 ab+cd+/可用表达式__B_来表示。
A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。
A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析7.词法分析器用于识别__C___。
A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符8.语法分析器则可以发现源程序中的___D__。
A.( ) 语义错误 B.( ) 语法和语义错误C.( ) 错误并校正 D.( ) 语法错误9.下面关于解释程序的描述正确的是__B___。
(1) 解释程序的特点是处理程序时不产生目标代码(2) 解释程序适用于 COBOL 和 FORTRAN 语言(3) 解释程序是为打开编译程序技术的僵局而开发的A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3)10.解释程序处理语言时 , 大多数采用的是__B___方法。
A.( ) 源程序命令被逐个直接解释执行B.( ) 先将源程序转化为中间代码 , 再解释执行C.( ) 先将源程序解释转化为目标程序 , 再执行D.( ) 以上方法都可以11.编译过程中 , 语法分析器的任务就是__B___。
编译原理习题集1

目录第一章编译概述 (1)第二章文法和语言 (2)第三章词法分析 (6)第四章自顶向下语法分析方法 (13)第五章算符优先分析法 (17)第六章LR(K)分析法 (22)第七章语义分析 (30)第九章运行时刻环境 (39)第十章代码优化 (46)第一章编译概述1、画出编译程序的总体结构图,简述其部分的主要功能。
[答案]编译程序的总框图见下图。
图1编译程序的总体结构图其中词法分析器,又称扫描器,它接受输入的源程序,对源程序进行词法分析,识别出一个个的单词符号,其输出结果上单词符号。
语法分析器对单词符号串进行语法分析(根据语法规则进行推导或归纳),识别出程序中的各类语法单位,最终判断输入串是否构成语法上正确的“程序”。
语义分析及中间代码产生器,按照语义规则对语法分析器归纳出(或推导出)的语法单位进行语义分析并把它们翻译成一定形式的中间代码。
编译程序可以根据不同的需要选择不同的中间代码形式,有的编译程序甚至没有中间代码形式,而直接生成目标代码。
优化器对中间代码进行优化处理。
一般最初生成的中间代码执行效率都比较低,因此要做中间代码的优化,其过程实际上是对中间代码进行等价替换,使程序在执行时能更快,并占用更小的空间。
目标代码生成器把中间代码翻译成目标程序。
中间代码一般是一种与机器无关的表示形式,只有把它再翻译成与机器硬件相关的机器能识别的语言,即目标程序,才能在机器上运行。
表格管理模块保持一系列的表格,登记源程序的各类信息和编译各阶段的进展状况。
编译程序各个阶段所产生的中间结果都记录在表格中,所需要的信息也大多从表格中,所需要的信息也大多从表格中获取,整个编译过程都在不断地和表格打交道。
出错处理程序对出现在源程序中的错误进行处理。
如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告给用户。
编译程序的各个阶段都有可能发现错误,出错处理程序要对发现的错误进行处理、记录,并反映给用户。
2、计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么?[答案]计算机执行用高级语言编写的程序主要途径有两种,即解释与编译。
编译原理考试题库

一、判断(共计50分,每题2.5分)1、静态存储分配策略是在程序运行期间为源程序中的量进行分配。
A. 正确B. 错误错误:【B】2、含有优化部分的编译程序的执行效率高。
A. 正确B. 错误错误:【A】3、四元式之间的联系是通过符号表实现的。
A. 正确B. 错误错误:【B】4、包含公共左因子的文法也能直接用预测分析法来分析。
A. 正确B. 错误错误:【B】5、局部优化是在一个程序块内进行的优化。
A. 正确B. 错误错误:【B】6、数组元素的地址计算与数组的存储方式有关。
A. 正确B. 错误错误:【A】7、紧跟在条件转移语句后面的语句是基本块的入口语句。
A. 正确B. 错误错误:【A】8、LL(1)文法是无左递归、无二义性文法。
A. 正确B. 错误错误:【A】9、设有一个LR(0)项目集I={X→α.Bβ, A→α.},该项目集含有“归约-归约”冲突。
A. 正确B. 错误错误:【B】10、使用语法制导翻译法的编译程序能够同时进行语法分析和语义分析。
A. 正确B. 错误错误:【A】11、包含左递归的文法也能直接用LL(1)分析法来分析。
A. 正确B. 错误错误:【B】12、产生式是用于定义词法成分的一种书写规则。
A. 正确B. 错误错误:【B】13、如果i •>j , 则j <•i 。
A. 正确B. 错误错误:【B】14、编译程序与解释程序的区别在于编译程序对源程序进行了翻译,而解释程序则没有。
A. 正确B. 错误错误:【B】15、在形式语言中,最右推导的逆过程也称为规范归约。
A. 正确B. 错误错误:【A】16、设有一个LR(0)项目集Ii={X→α.Bβ,A→α.},该项目集含有“移进-归约冲突”。
A. 正确B. 错误错误:【A】17、动态存储分配是指在编译阶段对源程序中的量进行分配,以使目标代码在运行时加快行速度。
A. 正确B. 错误错误:【B】18、设有一个LR(0)项目集Ii={X→α.,A→α.},该项目集含有“归约-归约冲突”。
编译原理复习题集

《编译原理》复习题集1.名词解释短语句柄文法上下文无关文法LL(1)文法LR(1)文法语法分析无环路有向图(DAG)后缀式语法制导翻译遍局部优化词法分析语法分析语义分析源语言源程序目标语言中间语言(中间表示)2.简答题(1)编译程序和高级语言有什么区别?(2)编译程序的工作分为那几个阶段?(3)简述自下而上的分析方法。
(4)目标代码有哪几种形式?生成目标代码时通常应考虑哪几个问题?(5)何谓优化?按所涉及的程序范围可分为哪几级优化?(6)简述代码优化的目的和意义。
3.叙述下面的正规式描述的语言,并画出接受该语言的最简DFA的状态转换图。
( 1 | 01 )* 0*4.Pascal语言无符号数的正规定义如下:num→digit+ (.digit+)? (E(+|-)? digit+)?其中digit表示数字,用状态转换图表示接受无符号数的确定有限自动机。
5.画出Pascal中实数(不带正负号,可带指数部分)的状态转换图。
6.用状态转换图表示接收(a|b)*aa的确定的有限自动机。
7.处于/* 和 */之间的串构成注解,注解中间没有*/。
画出接受这种注解的DFA的状态转换图。
8.某操作系统下合法的文件名为device:name.extension其中第一部分(device:)和第三部分(.extension)可缺省,device, name和extension都是字母串,长度不限,但至少为1,画出识别这种文件名的确定有限自动机。
9.构造一个DFA,它接受∑={0, 1}上0和1的个数都是偶数的字符串。
10.设有非确定的有自限动机 NFA M=({A,B,C},{0,1},δ,{A},{C}),其中:δ(A,0)={C} δ (A,1)={A,B} δ (B,1)={C} δ (C,1)={C}。
请画出状态转换距阵和状态转换图。
11.设L⊆ {a,b,c}* 是满足下述条件的符号串构成的语言:(1)若出现a ,则其后至少紧跟两个c ;(2)若出现b ,其后至少紧跟一个c 。
编译原理期末试题8套含答案大题集

《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√)6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。
(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。
A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。
A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。
A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。
A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章▪什么是编译器?▪编译程序的结构分为几个阶段,各阶段的任务是什么?▪遍、编译前端及编译后端的含义?▪编译程序的生成方式有哪些?第二章▪ 1. 写一文法,使其语言是偶正整数的集合。
▪要求:(1)允许0打头(2)不允许0打头解:(1)允许0开头的偶正整数集合的文法E→NT|DT→NT|DN→D|1|3|5|7|9D→0|2|4|6|8(2)不允许0开头的偶正整数集合的文法E→NT|DT→FT|GN→D|1|3|5|7|9D→2|4|6|8F→N|0G→D|02.证明下述文法G[〈表达式〉]是二义的。
〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+|-|*|/解:可为句子a+a*a构造两个不同的最右推导:最右推导1 〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉⇒〈表达式〉〈运算符〉a⇒〈表达式〉* a⇒〈表达式〉〈运算符〉〈表达式〉* a⇒〈表达式〉〈运算符〉a * a⇒〈表达式〉+ a * a⇒ a + a * a最右推导2 〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉⇒〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a⇒〈表达式〉〈运算符〉〈表达式〉 * a⇒〈表达式〉〈运算符〉a * a⇒〈表达式〉+ a * a⇒ a + a * a3. 给出生成下述语言的上下文无关文法:(1){ anbnambm| n,m>=0}(2){ 1n0m1m0n| n,m>=0}解:(1){ anbnambm| n,m>=0}S→AAA→aAb|ε(2) { 1n0m1m0n| n ,m>=0}S →1S0|A A →0A1|ε第三章1、构造一个DFA ,它接收∑={a, b}上所有满足下述条件的字符串:字符串中的每个a 都有至少一个b 直接跟在其右边。
解:已知∑={a, b},根据题意得出相应的的正规式为: (b*abb*)* 根据正规式画出相应的DFA M ,如下图所示 用子集法将其确定化由DFA 得状态图 用最小化方法化简得:{0},{1},{2},{3,4},按顺序重新命名DFA M ’第四章练习1:文法G[V]:V →N|N[E] E →V|V+E N →i是否为LL(1)文法,如不是,如何将其改造成LL(1)文法。
解:LL(1)文法的基本条件是不含左递归和回溯(公共左因子),而G[V]中含有回溯,所以先消除回溯得到文法G’[V]:G’[V]: V→NV’ V’→ε|[E]E→VE’ E’→ε|+EN→i由LL(1)文法的充要条件可证G’[V]是LL(1)文法练习2:有文法G[s]:S→BA A→BS|d B→aA|bS|c(1)证明文法G是LL(1)文法。
(2)构造LL(1)分析表。
(3)写出句子adccd的分析过程解:(1)一个LL(1)文法的充要条件是:对每一个非终结符A的任何两个不同产生式A→α|β,有下面的条件成立:① FIRST(α)∩FIRST(β)=Φ;②若β* ε, 则有FIRST(α)∩FOLLOW(A)=Φ对于文法G[s]:S→BA A→BS|d B→aA|bS|c其FIRST集如下:FIRST(B)={a, b, c}; FIRST(A)={a, b, c, d}; FIRST(S)={a, b, c}。
其FOLLOW集如下:首先, FOLLOW(S)={#};对S→BA有: FIRST(A)\{ε}加入FOLLOW(B), 即FOLLOW(B)={a, b, c, d };对A→BS有:FIRST(S)\{ε}加入FOLLOW(B), 即FOLLOW(B)={a, b, c, d };对B→aA有:FOLLOW(B)加入FOLLOW(A), 即FOLLOW(A)={a, b, c, d };对B→bS有:FOLLOW(B)加入FOLLOW(S), 即FOLLOW(S)={#, a, b, c, d };由A→BS|d得:FIRST(BS) ∩FIRST(d) = { a, b, c } ∩{d} = Φ;由B→aA|bS|c得:FIRST(aA) ∩FIRST(bS) ∩FIRST(c) ={a} ∩{b} ∩{c}= Φ。
由于文法G[s]不存在形如β→ε的产生式,故无需求解形如FIRST(α)∩FOLLOW(A)的值。
也即,文法G[S]是一个LL(1)文法。
(2) 由G[s]:S→BA A→BS|d B→aA|bS|c的FIRST(B)={a, b, c}; FOLLOW(B)={a, b, c, d };FIRST(A)={a, b, c, d}; FOLLOW(A)={a, b, c, d };FIRST(S)={a, b, c}。
FOLLOW(S)={#, a, b, c, d }可构造LL(1)预测分析表如下:第五章1 已知文法G[S]为:S→a|∧|(T) T→T,S|S(1) 计算G[S]的FIRSTVT和LASTVT。
(2) 构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。
(3) 给出输入串 (a,(a,a))#的算符优先分析过程。
解:文法:S→a|∧|(T) T→T,S|S展开为:S→a S→∧S→(T)T→T,S T→S(1) FIRSTVT -- LASTVT表(2)算符优先关系表如下: 表中无多重入口所以是算符优先(OPG)文法。
(3) 输入串(a,(a,a))# 的算符优先分析过程为:第六章例1:有文法: S→(L)|a L→L,S|S给此文法配上语义动作子程序(或者说为此文法写一个语法制导定义),它输出配对括号的个数。
如对于句子(a,(a,a)),输出是2。
解:加入新开始符号S'和产生式S'→S,设num 为综合属性,代表值属性,则语法制导定义如下:产生式语义规则S'→S print(S.num)S→(L) S.num:=L.num+1S→a S.num:=0L→L1,S L.num:=L1.num+S.numL→S L.num:=S.num例2:构造属性文法,能对下面的文法,只利用综合属性获得类型信息。
D → L,id | L L → T id T → int | real解:属性文法(语法制导)定义:产生式语义规则D → L,id D.type:=L.typeaddtype(id.entry,L.type)D → L D.type:=L.typeL → T id L.type:=T.typeaddtype(id.entry,T.type)T → int T.type:=integerT → real T.type:=real第七章例1:给出下面表达式的逆波兰表示(后缀式):(1) a*(-b+c)(2) if(x+y)*z=0 then s:=(a+b)*c else s:=a*b*c解:(1) ab-c+*(2) xy+z*0=sab+c*:=sab*c*:=¥(注:¥表示if-then-else 运算)例2:请将表达式-(a+b)*(c+d)-(a+b)分别表示成三元式、间接三元式和四元式序列。
解:三元式间接三元式(1) (+ a, b) 间接三元式序列间接码表(2) (+ c, d) (1) (+ a, b) (1)(3) (* (1), (2)) (2) (+ c, d) (2)(4) (- (3), /) (3) (* (1), (2)) (3)(5) (+ a, b) (4) (- (3), /) (4)(6) (- (4), (5)) (5) (- (4), (1)) (1)(5)四元式(1) (+, a, b, t1) (2) (+, c, d, t2)(3) (*, t1, t2, t3) (4) (-, t3, /, t4)(5) (+, a, b, t5) (6) (-, t4, t5, t6)例3:请将下列语句while (A<B) do if (C>D) then X:=Y+Z翻译成四元式解:假定翻译的四元式序列从(100)开始:(100) if A<B goto(102)(101) goto (107)(102) if C>D goto(104)(103) goto (100)(104) T∶=Y+Z(105) X∶=T(106) goto (100)(107)例4:写出for 语句的翻译方案解:产生式动作S → for E do S1 S.begin := newlabelS.first := newtempst := newtempS.curr:= newtempS.code:=gen(S.first “:=” E.init)||gen(st “:=” E.final)||gen(“if” S.first “>” st “goto” S.next) ||gen(S.curr “:=” S.first)||gen(S.begin “:” )||gen(“if ” S.curr “>” st “goto” S.next) ||S1.code||gen(S.curr := succ(S.curr))||gen(“goto” S.begin)E → v:=initial to final E.init := initial.placeE.final := final.place第八章例1:C语言中规定变量标识符的定义可分为extern, extern static, auto, local static 和register五种存储类:(1) 对五种存储类所定义的每种变量,分别说明其作用域。
(2) 试给出适合上述存储类变量的内存分配方式。
(3) 符号表中登记的存储类属性,在编译过程中支持什么样的语义检查。
解:(1) extern 定义的变量,其作用域是整个C 语言程序。
extern static 定义的变量,其作用域是该定义所在的C 程序文件。
auto 定义的变量,其作用域是该定义所在的例程。
local static 定义的变量,其作用域是该定义所在的例程。
且在退出该例程时,该变量的值仍保留。
register 定义的变量,其作用域与auto 定义的变量一样。
这种变量的值,在寄存器有条件时,可存放在寄存器中,以提高运行效率。
(2) 对extern 变量,设置一个全局的静态公共区进行分配。
对extern static 变量,为每个C 程序文件,分别设置一个局部静态公共区进行分配。
对auto 和register 变量,设定它们在该例程的动态区中的相对区头的位移量。
而例程动态区在运行时再做动态分配。