编译原理
Coder_py
这个作者很懒,什么都没留下…
展开
-
可执行文件的装载与进程
可执行文件的装载与进程进程虚拟地址空间程序与进程的区别?程序是一个静态的概念,就是一些预先编译好的指令和数据集合的一个文件进程则是一个动态的概念,它是程序运行时的一个过程,很多时候吧动态库也叫作运行时每个程序被运行起来以后,它将拥有自己独立的虚拟地址空间(Virtual Address Space),这个虚拟地址空间的大小由计算机的硬件平台决定,**具体地说是由CPU的位数决...原创 2020-04-09 10:40:58 · 703 阅读 · 0 评论 -
动态链接
动态链接为什么需要动态链接静态链接使得不同的程序开发者和部门能够相对独立的开发和测试自己的程序模块,从某种意义上来讲大大促进了程序开发的效率,原先现在程序规模也随之扩大。但静态链接的缺点也暴露出来:浪费内存、磁盘空间、模块更新困难。内存与磁盘空间静态链接在计算机早期还是比较流行的,但是到了后面,其缺点也非常明显。比如浪费内存和磁盘空间,更新模块困难等。举个例子,每个程序内部除了都保留了...原创 2020-04-08 20:29:46 · 4094 阅读 · 1 评论 -
静态链接
静态链接当有两个目标文件时,如何将它们连接起来形成一个可执行文件?其中发生了什么?使用两个源代码文件作为研究例子:a.cextern int shared;int main(){ int a = 100; swap(&a,&shared);}b.cint shared = 1;void swap(int *a,int *b){...原创 2020-04-01 09:33:40 · 1008 阅读 · 1 评论 -
目标文件
目标文件有什么目标文件的格式PC平台流行的可执行文件格式主要为Windows下:PELinux下:ELF目标文件就是源代码编译之后但是未进行链接的那些中间文件(Windows下的.obj和Linux下的.o)目标文件具体什么样子目标文件中的内容除了编译后的机器指令代码,还有链接时所需要的一些信息,比如:符号表,调试信息,字符串等,一般目标文件将这些信息按照不同的属性,以“...原创 2020-03-30 09:44:21 · 646 阅读 · 0 评论 -
编译与链接
编译与链接代码运行背后的过程经典C语言程序:#include<stdio.h>int main(){ printf("hello world!\n"); return 0;}Linux下,使用gcc来编译这个程序,进入命令行输入:gcc hello.c可以看到文件下面多出了一个a.out文件:Linux的.out是由gcc编译生成的二进...原创 2020-03-26 10:09:04 · 296 阅读 · 0 评论 -
实现一个简单的词法分析器
实现一个简单的词法分析器词法分析词法分析的工作是将一个长长的字符串识别出一个个的单词,这一个个单词就是 Token。而且词法分析的工作是一边读取一边识别字符串的,不是把字符串都读到内存再识别词法单元:单词的内部表示是词法单元 token编程语言中最小的语法单元词法单元的表示目标程序语句:age >= 45解析age >= 45过程图:标识符、...原创 2020-03-25 15:09:38 · 1440 阅读 · 0 评论