absolute address (绝对地址)
绝对地址是一个惟一的可用来指定某个内存字节的数字数值。参见相对地址。
address (地址)
参见绝对地址和相对地址。
aggregate (聚集)
包含多于一个基本数据类型的数据类型。例如,数组是一种聚集, C 的结构( struct )也是。
aliasing (别名机制)
同一内存地址可直接或间接地通过两个或多个不同名字(可能还有不同的数据结构)进行访问,这被叫做别名。由于在寄存器中保留数值是比较常见的做法,因此这是对于优化采取的特殊考虑。
ANSI ( American National Standards Institute ,美国国家标准协会)
管理和协调美国自发标准的组织。
archive (文档)
参见库。
assembler (汇编器)
一个平台相关的程序,它读取汇编语言源文件(机器代码的助记表示)并将其翻译为作为连接程序输入的二进制目标文件。
backtrace (回退跟踪)
GNU 调试器可以打印函数名和地址的列表,它会被调用以达到程序的当前执行点。这些信息,包括函数地址和参数值,称为回退跟踪。
BFD ( Binary File Descriptor ,二进制文件描述字 )
包含处理各种二进制文件格式完成各种底层操作的例程的库。
BSD ( Berkeley Software/Standard Distribution , Berkeley 软件 / 标准发行)
一种 UNIX 操作系统。它也是几种其他现代 UNIX 系统的基础。参见 SVR4 。
bss
由 UNIX 连接程序生成的可执行文件的未初始化数据段。它包含的数据只有地址但不包含任何空间。因此,直到程序被加载时才会分配空间。在可执行文件中, bss 变量只被赋以名字、尺寸和位置。参见 text 和 data 。
built in function (内嵌函数)
由编译程序所生成的函数体称为内嵌函数。一个内嵌函数可以是相应标准库函数的优化版本、编译程序的附加功能或是实现诸如变长参数列表等内部使用的函数。
bytecode (字节码)
编译 Java 程序所生成的目标代码的可移植形式。字节码由 Java 虚拟机解释以执行 Java 程序。
C89
1989 ANSI C 标准。
C99
1999 ANSI C 标准。
calling convention (调用规范)
参见调用序列。
calling sequence (调用序列)
用来调用函数的汇编语言的语句序列。该序列设置需要传递的参数、保存返回的地址以保证可以找到调用函数,执行调用并管理返回值(如果有的话)。也叫做调用规范。
CCP ( Conditional Code Propagation ,条件代码传播)
一种优化技术,可以发现某值对所有可能的执行路径均为常量,并用这一事实来探测和删除不可能被执行的代码。
cfront
最初的 C++ 实现是一个称为 cfront 的 AT&T 程序,它将 C++ 源代码翻译为 C 源代码。
class (类)
1. 在面向对象编程中,一个类就是一个对象类型的定义。由它所生成的对象,由于它们具有相同的接口和行为集,称它们属于同一类。 2. 在 Java 中,包含已编译类的文件称为类文件,或简称为类。
clobber (破坏)
如果存储位置(通常为一个寄存器)已经被用作一个临时工作区,它就不再保存所预期的数值,这个存储位置就称为被破坏( clobbered )了。
CNI ( Cygnus Native Interface , Cygnus 本地接口)
在 C++ 中,用于编写本地 Java 方法的工具。参见 JNI 。
code (代码)
这个术语是指计算机上运行的任何形式的指令列表。代码可以是所有形式,从人可读的编程源码到机器可读的操作码的位模式。
code propagation (代码传播)
参见 CPP 。
coercion (自动转换)
由一种基础数据类型到另一种的自动转换(没有强制类型转换或函数调用)。
COFF ( Common Object File Format ,通用目标文件格式)
一种可跨系统移植的并由各种不同的汇编器和连接程序所了解的目标文件的标准格式。参见 ECOFF 和 XCOFF 。
COMDAT ( Common Data ,通用数据)
可以在不只一个目标文件中被复制的一种数据或可执行项(或项目的集合)。当将目标
文件和库或可执行体组合起来时,连接程序会去掉所有通用数据,只留下其中一份数据。这也称为合拢或通用数据合拢。
common (通用)
可为公用块分配的全局变量属性。
common block (公用块)
GNU 连接程序创建一个公用块作为全局变量的分配空间。如果不同的目标文件多次声明了相同的全局变量,它们会被解析为公用块中单独的一个变量。参见 COMDAT 。
compilation unit (编译单元)
可被编译为单独目标文件的单独源代码单位。它通常就是单独的一个源文件,但也可以包含其他辅助编译的源代码(如 C 程序中 #include 文件)。也称为翻译单元。
compiler (编译程序)
读取计算机程序的源文件(或文本文件)的软件集合,可将指令翻译成计算机可执行的格式。编译程序也称为翻译器( translator )。
copyleft (版权所属)
同通用许可证,它声明程序是自由软件并且所有修改和扩展的软件版本均可以自由发行。参见 GPL 。
cross compile (交叉编译)
使用一种编译程序创建在完全不同平台上执行的可执行文件。
CPP ( C Preprocessor , C 预处理程序)
预处理程序读取程序源码,并处理其中的指示字以产生源码的修改版本。
cruft
随着软件的发展,以及经历了修改 bug 和更新的若干周期,它的部分代码已不再使用但仍然保留在源码中。这种代码称为 cruft 。 cruft 的尺寸范围可由一两行无用代码到整个源文件模块。由于很难识别 cruft ,去除 cruft 往往很困难。
CSE ( Common Subexpression Elimination ,通用子表达式消除)
一种优化技术,它可以识别重复的表达式并重用它的值,而不是再次执行相应的计算。参见 GCSE 。
ctor
构造函数 constructor 的通用缩写。参见 dtor 。
CVS ( Concurrent Version System ,同步版本系统)
一种版本控制系统,它可以维护文本文件的版本历史信息。设计它是为使广泛分布于各地的不同开发者可同时访问。
data
由 UNIX 连接程序生成的可执行文件的一部分,其中包含的数据具有初始值。该段包含的项具有名字、大小,且会分配相应的空间包含它的数值。参见 bss 和 text 。
DBX
一种交互式调试器,它可以用来一行行地跟踪程序的执行。 DBX 是一种命令行调试器,但在许多变体中它具有 X GUI 界面和 emacs 界面。
DCE ( Dead Code Elimination ,不可达代码去除 )
一种删除不可能被执行的代码的优化技术。
dead code (不可达代码)
在优化期间,可能留下某些代码但从不会被执行。这些就是不可达代码。优化器应该去除这些代码。
demangle
解析出编码在已经拆分( mangle )了的函数名中的描述信息的过程。参见 mangle 。
deprecated (已废止的)
任何不再需要的编译程序的选项或功能(或是因为某些原因而认为不再恰当的)被称为是已废止的。它仍然存在但在以后的编译程序版本中可能去除。
dereference (去引用)
表达式可能会涉及保存在指针中的地址。用这种方式使用的指针就称为是去引用的。
directive (指示字)
1. 源代码中使用井号 (#) 开头的命令,它由预处理程序处理。 2. 在汇编语言中,一条指示字就是一条针对汇编器的指令,而不是产生代码的操作码。汇编器指示字也称为伪操作。
distention (膨胀)
该名字用于某些特定 Fortran 语言扩展,现在均认为非常“丑陋”而不该使用。通过 -fugly-* 标记, g77 可支持某些扩展。
dtor
析构函数 destructor 的通用缩写。参见 ctor 。
DWARF ( Debugging With Attribute Format ,带属性的调试格式)
一种用来在目标代码中插入调试信息的格式。
DWARF2 ( Debugging With Attribute Format 2 ,带属性的调试格式 2 )
DWARF 的更新版本,该格式用来在目标代码中插入调试信息。
dynamic library (动态库)
参见库。
ECOFF ( Extended Common Object File Format ,扩展通用目标文件格式)
目标文件的标准格式,它具备系统间的可移植性,且不同汇编器和连接程序均了解该格式使用。参见 COFF 和 XCOFF 。
EH
异常处理( exception handling )的缩写。
elaborate (详细阐述)
在 Ada 中,执行前的最后一步是通过插入必要的初始值和可执行指令来详细阐述代码,通常需要同一程序中其他编译单元的内容。参见可预阐述( preelaborable )。
elaboration (详细阐述)
在 Ada 语言中,详细阐述是所需的详细阐述软件包的过程。
ELF ( Executable and Linkable Format ,可执行和可链接格式)
Linux 二进制目标文件格式,它包含动态加载库和可执行代码的信息。 ELF 由 COFF 格式演变而来,与 COFF 非常近似。
elide (省略)
一个被省略的函数就是使用调用者返回位置作为工作空间(而非建立自己的内部工作空间)返回数值的函数,之后它会将返回值复制到返回地址中。优化器可以省略函数调用。
entry point (入口点)
可执行程序中的地址,程序从这里开始执行并称为入口点。
fetch (读取)
当计算机由内存中的程序读取指令并加载到 CPU 执行时,这称为指令的读取。参见预取( prefetch )。
FPU ( Floating Point Unit ,浮点处理单元)
同 CPU 一起工作处理浮点操作的硬件处理器。没有 FPU 的计算机将需要软件来仿真浮点操作。
folding (合拢)
参见 COMDAT 。
frame (栈)
参见堆栈框架。
function (函数)
函数是一块可执行代码,它被赋予一个名字并可以在其他位置调用。一个函数也可以被定义为带有参数,它指定一列由调用者传递的参数值。参见成员函数和方法。
garbage collection (无用信息收集)
一个运行的程序的过程,它可以自动恢复动态分配但不再使用的内存。实现该过程有许多机制,但所有这些均可以被认为是无用信息收集。
GCSE ( Global Common Subexpression Elimination ,全局公用子表达式去除)
一种优化技术,它可以识别重复的表达式并重用它的数值,而不是再次执行相应的计算。参见 CSE 。
GNAT ( GNU Ada Translator , GNU Ada 翻译器)
原 Ada 前端的名字,现已成为 GCC 的一部分。
GNATS ( GNU Bug Tracking System , GNU 错误跟踪系统)
用来跟踪 GCC 和其他 GNU 软件错误的在线系统。GOT ( Global Offset Table ,全局偏移表)
目标文件中包含一组偏移的表格,可用来重新定位可执行代码。参见 PIC 。
GPL ( General Public License ,通用公共许可证)
一种许可证,在其许可下软件被编写为 copyleft 格式的自由软件。
header (头文件)
由预处理程序执行 include 指示字并被包含在源文本文件中的文件。在 C , C++ 和 Objective C 中,传统上它是后缀为 .h 的文件。
Hollerith field ( Hollerith 字段)
在 Fortran 中,引用的字串被保存为字符数,后面跟着的是字符本身。可以用 Hollerith 字段创建字符串,它是一个长度后跟一个 H 字母以及字符串(例如, 10HPhillips66 )。
host (主机)
参见平台。
i18n
单词 internationalization 的简写形式,它由字母 i 开头,后跟 18 个字符,最后是字母 n 。参见 l10n 。
if-conversion ( if- 转换)
一种优化过程,它会修改已生成的代码,以便分支之后的最可能被采用的路径比不可能采用的路径更有效。
immediate (立即数)
一个立即数值是一个常量,可以在汇编语言操作码中作为操作数使用。
include guard (包含文件防护)
习惯上使用预处理程序条件编译命令来定义一个环境变量,它可以在头文件的最先部分进行检测,以防止头文件被再次编译。如果变量尚未定义,头文件就会被编译了。
induction variable (归纳变量)
一种在循环体内递增的变量。循环计数器。
inline (内联)
一个函数的实体(或其他相似的语言成分)被包含在函数的调用点。就是说函数体将在代码中内嵌展开,而不是只作为对另一处函数体的一次调用。
insn
一种机器语言或 RTL 中间语言指令。该语言具有许多特殊用途的 insn ,但最重要的一些构成了一种元汇编语言,可被翻译为目标机器上的汇编语言指令。
instantiation (实例化)
由类定义创建对象实例。
intrinsic (特质)
在 Fortran 中,特质函数是一种内嵌函数,由于它可以不声明而直接使用,因此被视为语言的一部分。
invariant expression (不变表达式)
循环体内的表达式,每次循环时所计算的数值是不变量,在优化时可以转移到循环外。
ISO ( International Organization or Standardization ,国际标准化组织)
一个成立于 1946 年的国际标准组织, ISO 的成员来自 75 个国家的标准组织,包括 ANSI 。
jar
一种包含一个或多个 Java 类文件的档案文件。该文件还包含一个清单,是一个包含 jar 文件中类名列表的文本文件。
Java Virtual Machine ( Java 虚拟机)
参见 JVM 。
JNI ( Java Native Interface , Java 本地接口)
一种标准编程接口,用于编写 Java 本地方法和将 JVM 嵌入到本地应用中。参见 CNI 。
JVM ( Java Virtual Machine , Java 虚拟机)
一个程序,它可从标准 Java 字节码格式的文件中读取指令并执行。向一个平台上移植 JVM 和标准类库实际上就是向该平台移植了所有的 Java 程序。
l10n
单词 localization 的简写,其起始字母是 l ,其后是 10 个字母,结尾字母是 n 。参见 i18n 。
lexical analysis (词法分析)
也称为词法扫描,词法分析就是从程序源文件中读取输入字符流,并按照某种方式组合它们,形成名字、数字以及标点。由一些字符集合构成的单元称为一个 token 。
LGPL ( Lesser General Public License ,次要的通用公共许可证)
该许可证可用于某些(但不是全部) GNU 库。该许可证允许库函数用于某些私有程序,通常这是 GPL 所不允许的。
library (库)
库是一个包含一个或多个目标文件的文件,它可以链接到其他目标文件组成可执行文件。静态库就是包含由连接程序永久链接到可执行程序的模块的库。静态库也称为文案。共享库就是包含可以临时链接到可执行程序并在执行时进行真正链接的模块的库。共享库也称为动态库。动态链接的程序就是包含到这些函数的引用的可执行程序,当程序执行时,它会从动态库中加载这些函数。参见静态库和相对地址。
life analysis (生命周期分析)
确定哪个数值应该留在寄存器中可供后用的过程,同时也确定哪个寄存器不会被使用,因为其中包含的数值不再使用。
link editor (链接编辑器)
与连接程序相同。
linkage (链接)
当调用函数时,必须用标准方法来存储和读取传递给函数的参数以及函数所返回的数值。这种协议称为链接,而且是混合两种语言时要解决的主要问题。
linker (链接程序)
一种平台相关的程序,可将一组目标文件(某些必须由库中析取)组合在一起生成一个可执行程序。
lvalue (左值)
一种任意类型的表达式,可以解析为内存单元的某个地址。这个术语源于 left value ,就是指赋值语句中左边的部分的值。参见右值( rvalue )。