⑤ 符号变量的存储分配信息 根据符号变量的存储类别定义及它们出现的位置和次序来确定每一个变量应分配的存储区及在该区中的具体位置,用相对区头的位移量表示。
  通常一个编译程序有两类存储区,即静态存储区动态存储区
  ⑴ 静态存储区 该存储区单元经定义分配后成为静态单元,即在整个语言程序运行过程中是不可改变的。作静态分配的符号变量是具有整个程序运行过程的生命周期。因此编译程序可以设置一个固定的空间作为静态存储区。但由于不同的静态变量具有不同的可视性,编译程序也可以设置几个不同的固定空间作为静态区。根据变量存储类别及作用域规则,这类静态存储区通常又可分为公共静态区和若干个局部静态区。
  一个语言程序中的公共变量或称外部变量是被指定分配到该公共静态存储区中。Fortran语言中公共块的变量、Pascal或C语言中的外部量就属于这类共静态存储区的分配。在公共静态区中的变量具有的生命周期是该程序运行的全过程,且其作用域亦是整个语言程序(注意:当它被同名局部量屏蔽时,该变量成为不可视的)。
  编译程序为局部静态量可设立若干个局部静态区。对外部静态量,为每个程序文件建立一个局部静态区,对内部静态量,则为每个具有内部静态量定义的函数或过程,建立一个局部静态区。Fortran语言程序中Save语句定义的变量是局部于它所在的函数块或过程块的,Save变量是一个静态量,具有的生命周期是该程序运行的全过程,但它仅为所在块可视。在C语言中被Static所定义的符号变量具有的生命周期也是该程序运行的全过程。但被Static定义的变量若在函数之外则为所在之文件中所有函数可视。而若变量在函数内被定义为Static,则它仅为所在函数可视。分别分配不同的静态变量,这仅是编译处理上的问题,与语言无关。具体分配方式在存储分配章节中再讨论。