3.2程序编码
-og优化,
程序代码的转换:编译器将代码变成汇编代码,汇编器将代码变成二进制目标代码文件(不包含全局值的地址),链接器将目标代码文件和实现库函数的代码合并。产生可执行代码文件。
3.2.1 机器级代码
计算机系统有两种抽象。
一种是指令集架构(ISA)定义了处理器状态,指令的格式,以及每条指令对状态的影响,将程序描述成好像每条代码是顺序执行的。
一种是虚拟地址,将内存看作一个巨大的字节数组空间。
对c语言程序员隐藏的处理器状态都是可见的:
1.程序计数器
2.通用寄存器
3.条件码寄存器(算术或逻辑指令的状态信息)
4.向量寄存器(一个或多个整数或浮点数值)
程序内存包括:程序的可执行机器代码,操作系统所需要的一些信息,函数调用和返回所需要的栈,用户分配的内存块。
3.2.2 代码示例
linux>gcc -og -s(产生汇编文件 mstore.s)
linux>gcc -og -o(产生可执行代码文件 3.2初始介绍)
linux>gcc -og -c(编译并汇编该代码 产生目标代码文件【注意与可执行代码文件区分】 mstore.o)
反汇编器
linux>objdump -d mstore.o
将二进制代码文件转化为汇编文件,反汇编器只是基于机器代码文件的字节序列来确定汇编代码,不需要访问源代码或汇编代码。
链接器的任务之一就是为函数调用找到匹配的函数的可执行代码的位置。